AT_oidashi_a 不完全迷路

Description

[problemUrl]: https://atcoder.jp/contests/oidashi/tasks/oidashi_a あなたは、道端で怪しげな迷路ジェネレーターを拾ってしまいました。 迷路ジェネレーターを動かすと、縦$ H $マス、横$ W $マスの迷路を自動で生成してくれます。 しかし、それには不具合があり、ゴールにたどり着くことのできない迷路を生成するようでした。 そこで、あなたは迷路を修正し、ゴールにたどり着くことのできるようにすることにしました。 迷路には、壁`#`と道`.`があり、スタートのマス`S`とゴールのマス`G`が$ 1 $マスずつあります。 プレイヤーは、スタートのマスから移動を始め、隣接する縦横4マスの壁でないマスへ移動しながら、ゴールのマスを目指します。 あなたは、ここから壁のマスを **1マスのみ** 道のマスに替えることで、ゴールにたどり着くことのできる迷路を作ることにしました。 ただし、ただ適当な壁を道に変えるでは面白くないと考えたあなたは、スタートからゴールまでの最短経路長が **最長** になるように壁を道に変えることにしました。 上記の操作を行った場合の、スタートからゴールまでの最短経路長を答えてください。

Input Format

> $ H $ $ W $ $ line_1 $ $ line_2 $ ... $ line_H $ - 1行目には、迷路の高さ$ H $と、迷路の幅$ W $ $ (2\ \leq\ H,\ W\ \leq\ 298) $が与えられます。 - 2行目以降の$ H $行には、$ W $文字の文字列$ line_i $が与えられます。各$ line_i\ (1\ \leq\ i\ \leq\ H) $は、`#`,`.`,`S`,`G`で構成されており、`#`が壁、`.`が道、`S`がスタート地点、`G`がゴール地点を表します。 なお、`S`,`G`は迷路の中に必ず$ 1 $つづつ存在します。 与えられる迷路は、`S`から`G`へたどり着くことができず、必ず1マスの壁を道に替えるとゴールへたどりつけることが保証されています。

Output Format

修正した迷路のゴールまでの最短経路長を$ 1 $行で出力してください。 出力の末尾には改行を入れること。

Explanation/Hint

### Sample Explanation 2 ループするような道もありえます ### Sample Explanation 3 厚い壁もありえます ### Sample Explanation 4 最初から`S`、`G`どちらとも繋がっていない道もありえます