時間制限 : sec, メモリ制限 : KB
Japanese

カーペット (Carpet)

問題文

オシャレ好きのビ太郎は,カーペットを新調した.カーペットは縦 H 行,横 W 列のマス目状に区切られた長方形の形をしており,各マスは白か黒のいずれかの色で塗られている.カーペットの上から i 行目,左から j 列目 (1 ≦ i ≦ H1 ≦ j ≦ W) にあるマスの色は,文字列 Sij 文字目が . のとき白色,# のとき黒色である.

ビ太郎は,カーペットの最も左上のマスに駒を置き,以下の操作を何回か行うことで,その駒をカーペットの最も右下のマスに到達させるという遊びを思いついた.

  • 駒が置かれているマスと色が異なり,かつ上下左右に隣接するマスを 1 つ選び,そのマスに駒を移動させる.

ビ太郎は,到達までの操作回数をなるべく少なくしたい.ただし,カーペットの模様によっては到達させられないかもしれない.

カーペットの模様の情報が与えられたとき,操作を繰り返すことで左上のマスから右下のマスに駒を到達させることが可能かを判定し,可能ならば操作回数の最小値を求めるプログラムを作成せよ.

制約

  • 1 ≦ H ≦ 500
  • 1 ≦ W ≦ 500
  • (H, W) ≠ (1, 1)
  • Si は長さ W の文字列である (1 ≦ i ≦ H).
  • Si の 各文字は . または # である (1 ≦ i ≦ H).
  • H, W は整数である.

入力

入力は以下の形式で標準入力から与えられる.
H W
S1
S2
:
SH

出力

操作を繰り返すことで左上のマスから右下のマスに駒を到達させることが可能な場合は操作回数の最小値を,不可能な場合は -1 を,標準出力に 1 行で出力せよ.

入出力例

入力例 1

4 5
...#.
#####
...#.
#.###

出力例 1

9

例えば,図のような操作が考えられる.

操作の 2 例の図示

左の例では 9 回の操作で,右の例では 13 回の操作で,左上のマスから右下のマスに駒を到達させることが可能である.

9 回よりも少ない操作回数で到達させることは不可能なので,9 を出力する.

入力例 2

3 3
...
...
...

出力例 2

-1

はじめから操作ができない場合もある.この場合,駒を右下のマスに到達させることは不可能なので,-1 を出力する.

入力例 3

1 5
.#.#.

出力例 3

4

入力例 4

5 5
###.#
.#...
.#..#
.####
##..#

出力例 4

12

入力例 5

7 5
.#.##
##...
.#.##
.###.
##.#.
...#.
##.#.

出力例 5

12

クリエイティブ・コモンズ・ライセンス

情報オリンピック日本委員会作 『第 21 回日本情報オリンピック JOI 2021/2022 二次予選競技課題』