AT_abc436_d [ABC436D] Teleport Maze

Description

$ H $ 行 $ W $ 列のマス目からなる迷路があります。 上から $ i $ 行目、左から $ j $ 列目のマスを $ (i,j) $ と表記します。 マス $ (i,j) $ がどのようなマスであるかは文字 $ S_{i,j} $ として与えられ、各文字の意味は以下の通りです。 - `.` : 空きマス - `#` : 障害物マス - 英小文字(`a` - `z`): ワープマス 迷路内では、以下の二種類の行動を好きな順序で何回でも行うことができます。 - 歩行:現在いるマスから上下左右の四方向のいずれかに $ 1 $ マス分進んだマスへ移動する。ただし、障害物マスへ移動することや、マス目の外に移動することはできない。 - ワープ:ワープマスにいるとき、そのワープマスと同じ文字が書かれたワープマスのうちいずれか好きなマスへと移動する。 マス $ (1,1) $ からマス $ (H,W) $ へ移動することが可能かどうか判定し、可能ならばそれに必要な最小の合計行動回数を求めてください。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ H $ $ W $ $ S_{1,1}S_{1,2}\dots S_{1,W} $ $ \vdots $ $ S_{H,1}S_{H,2}\dots S_{H,W} $

Output Format

マス $ (1,1) $ からマス $ (H,W) $ へ移動することが可能ならばそれに必要な最小の合計行動回数を、不可能ならば `-1` を出力せよ。

Explanation/Hint

### Sample Explanation 1 以下のように行動することで、マス $ (1,1) $ からマス $ (3,4) $ へ移動することができます。 1. マス $ (1,1) $ からマス $ (1,2) $ へ歩行によって移動する。 2. マス $ (1,2) $ からマス $ (1,3) $ へ歩行によって移動する。 3. マス $ (1,3) $ からマス $ (3,2) $ へワープによって移動する。 4. マス $ (3,2) $ からマス $ (3,1) $ へ歩行によって移動する。 5. マス $ (3,1) $ からマス $ (3,4) $ へワープによって移動する。 このときの合計行動回数は $ 5 $ 回であり、これが最小です。 ### Sample Explanation 2 マス $ (1,1) $ からマス $ (3,4) $ へ移動することは不可能です。 ### Constraints - $ 1\leq H,W \leq 1000 $ - $ H\times W \geq 2 $ - $ H,W $ は整数 - $ S_{i,j} $ は `.`, `#`, または英小文字のいずれか - $ S_{1,1}\neq $ `#` - $ S_{H,W}\neq $ `#`