AT_abc243_h [ABC243Ex] Builder Takahashi (Enhanced version)
Description
[problemUrl]: https://atcoder.jp/contests/abc243/tasks/abc243_h
縦横 $ H\ \times\ W $ マスのグリッドがあります。上から $ i $ 行目、左から $ j $ 列目のマスを $ (i,j) $ と表します。
各マスの状態は $ C_{i,j} $ で表されます。各マスの状態は次の $ 4 $ つのいずれかです。
- `S` : スタート地点。グリッド上にちょうど $ 1 $ つだけ存在する。
- `G` : ゴール地点。グリッド上にちょうど $ 1 $ つだけ存在する。
- `.` : 壁を建ててよいマス。
- `O` : 壁を建ててはいけないマス。
青木君はスタート地点を出発してグリッド上を移動してゴール地点へ行こうとしています。青木君は $ (i,j) $ にいるときにマス $ (i+1,j),(i,j+1),(i-1,j),(i,j-1) $ のいずれかに移動することができます。ただし、グリッドの外に出るような移動や、壁があるマスへの移動を行うことはできません。
高橋君は、青木君が移動を開始する前に壁を建ててよいマスを $ 1 $ マス以上選んで壁を建てることで、青木君がどのように移動してもゴール地点へ行くことができないようにすることにしました。ただし、スタート地点およびゴール地点は選ぶことができません。
高橋君は青木君がゴールできないように壁を建てることができますか?さらに、壁を建てられる場合は
- 青木君がゴールできないように壁を建てるときの最小枚数 $ n $ 、および
- 最小枚数を達成する壁の立て方が何通りあるかを $ 998244353 $ で割ったあまり $ r $
の $ 2 $ つも合わせて計算してください。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ H $ $ W $ $ C_{1,1} $$ C_{1,2} $$ \dots $$ C_{1,W} $ $ C_{2,1} $$ C_{2,2} $$ \dots $$ C_{2,W} $ $ \vdots $ $ C_{H,1} $$ C_{H,2} $$ \dots $$ C_{H,W} $
Output Format
青木君がゴールできないように壁を建てられる場合は、文字列 `Yes` 、および問題文中で定義された整数 $ n $, $ r $ を以下の形式で出力せよ。
> Yes $ n $ $ r $
そうでない場合は `No` を出力せよ。
Explanation/Hint
### 制約
- $ 2\ \leq\ H\ \leq\ 100 $
- $ 2\ \leq\ W\ \leq\ 100 $
- $ C_{i,j} $ は `S`, `G`, `.`, `O` のいずれかである。
- `S`, `G` は $ C_{i,j} $ の中でちょうど $ 1 $ 回だけ登場する。
### Sample Explanation 1
壁を建てるマスを `#` で表すと、最小枚数を達成する壁の建て方は次の $ 6 $ 通りとなります。 ``` S#. S.# S.. S.. S.. S.. O#. O#. O## O.# O.# O.# #.O #.O #.O ##O .#O .#O ..G ..G ..G ..G #.G .#G ```
### Sample Explanation 2
高橋君がどのように壁を建てても青木君はゴール地点へ行くことができます。