AT_abc151_d [ABC151D] Maze Master

Description

[problemUrl]: https://atcoder.jp/contests/abc151/tasks/abc151_d 高橋君は、縦 $ H $ マス、横 $ W $ マスの $ H\ \times\ W $ マスからなる迷路を持っています。 上から $ i $ 行目、左から $ j $ 列目のマス $ (i,j) $ は、 $ S_{ij} $ が `#` のとき壁であり、`.` のとき道です。 道のマスからは、上下左右に隣接する道のマスに移動することができます。 迷路の外に移動すること、壁のマスへ移動すること、斜めに移動することはできません。 高橋君は、道のマスからスタートとゴールを自由に決め、迷路を青木君に渡します。 青木君は、移動回数が最小になるようにしてスタートからゴールまで移動します。 高橋君がスタートとゴールの位置を適切に定めたとき、青木君の移動回数は最大で何回になるでしょうか?

Input Format

入力は以下の形式で標準入力から与えられる。 > $ H $ $ W $ $ S_{11} $$ ... $$ S_{1W} $ $ : $ $ S_{H1} $$ ... $$ S_{HW} $

Output Format

青木君の移動回数の最大値を出力せよ。

Explanation/Hint

### 制約 - $ 1\ \leq\ H,W\ \leq\ 20 $ - $ S_{ij} $ は `.` か `#` - $ S $ は `.` を $ 2 $ つ以上含む - 任意の道のマスから任意の道のマスまで $ 0 $ 回以上の移動で到達できる ### Sample Explanation 1 高橋君が左上のマスをスタート、右下のマスをゴールにした場合、青木君の移動回数は $ 4 $ 回になります。 ### Sample Explanation 2 高橋君が左下のマスをスタート、右上のマスをゴールにした場合、青木君の移動回数は $ 10 $ 回になります。