#abc243h. [abc243_h]Builder Takahashi (Enhanced version)

[abc243_h]Builder Takahashi (Enhanced version)

问题描述

有一个 H×WH \times W 方格网格。(i,j)(i,j) 表示从顶部开始第 ii 行第 jj 列的方格。 Ci,jC_{i,j} 表示每个方格的状态。每个方格都处于以下四种状态之一。

  • S:起点。网格中恰好有一个起点。
  • G:目标。网格中恰好有一个目标。
  • .:可建造的方格,可以建墙。
  • O:不可建造的方格,不能建墙。

Aoki 打算从起点出发到达目标。当他在 (i,j)(i,j) 位置时,他可以向下一个位置移动到 (i+1,j)(i+1,j)(i,j+1)(i,j+1)(i1,j)(i-1,j)(i,j1)(i,j-1)。不允许走出网格或进入带有墙的方格。

Takahashi 决定在 Aoki 出发前选择一个或多个可建造的方格上建墙,以阻止 Aoki 到达目标。这里不能选择起点和目标。

Takahashi 是否可以建立墙壁防止 Aoki 到达目标?如果可能,还需计算以下两个值:

  • 防止 Aoki 到达目标所需的最小墙壁数量 nn
  • 998244353998244353 取模的方式实现最小墙壁数量的方法数 rr

约束条件

  • 2H1002 \leq H \leq 100
  • 2W1002 \leq W \leq 100
  • Ci,jC_{i,j} 的值为 SG.O
  • SGCi,jC_{i,j} 中各出现一次。

输入

输入以以下格式从标准输入中给出:

HH WW C1,1C_{1,1}C1,2C_{1,2}\dotsC1,WC_{1,W} C2,1C_{2,1}C2,2C_{2,2}\dotsC2,WC_{2,W} \vdots CH,1C_{H,1}CH,2C_{H,2}\dotsCH,WC_{H,W}

输出

如果可以建墙阻止 Aoki 到达目标,则按照以下格式输出字符串 Yes 和问题描述中定义的整数 nnrr

Yes nn rr

否则,输出 No


示例输入 1

4 3
S..
O..
..O
..G

示例输出 1

Yes
3 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

示例输入 2

3 2
.G
.O
.S

示例输出 2

No

无论 Takahashi 如何建墙,Aoki 总是可以到达目标。


示例输入 3

2 2
S.
.G

示例输出 3

Yes
2 1

示例输入 4

10 10
OOO...OOO.
.....OOO.O
OOO.OO.OOO
OOO..O..S.
....O.O.O.
.OO.O.OOOO
..OOOG.O.O
.O.O..OOOO
.O.O.OO...
...O..O..O

示例输出 4

Yes
10 12