#arc074d. [arc074_d]Lotus Leaves

[arc074_d]Lotus Leaves

题目描述

有一个矩形形状的池塘。池塘被划分为一个 HHWW 列的方格网格。我们用 (i,j)(i, j) 表示从上到下第 ii 行、从左到右第 jj 列的方格。

池塘中一些方格上漂浮着莲叶。在其中一个叶子上,标记为 SS,有一只青蛙试图跳到另一个叶子 TT 上。方格 (i,j)(i, j) 的状态用字符 aija_{ij} 表示,如下所示:

  • .:没有叶子的方格。
  • o:水面上带有叶子的方格。
  • S:带有叶子 SS 的方格。
  • T:带有叶子 TT 的方格。

青蛙将重复执行以下动作以到达叶子 TT:「跳到与青蛙当前所在叶子在同一行或同一列的叶子上」。

Snuke 正试图除了 SSTT 之外移除一些叶子,使得青蛙无法到达叶子 TT。判断是否可以实现这个目标。如果可以实现,找到必须移除的最小叶子数。

约束条件

  • 2H,W1002 ≤ H, W ≤ 100
  • aija_{ij}., o, ST
  • aija_{ij} 中恰好有一个 S
  • aija_{ij} 中恰好有一个 T

输入

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

HH WW a11a_{11} ...... a1Wa_{1W} :: aH1a_{H1} ...... aHWa_{HW}

输出

如果可以实现目标,请打印必须移除的最小叶子数。否则,打印 -1

示例输入1

3 3
S.o
.o.
o.T

示例输出1

2

移除右上角和左下角的叶子。

示例输入2

3 4
S...
.oo.
...T

示例输出2

0

示例输入3

4 3
.S.
.o.
.o.
.T.

示例输出3

-1

示例输入4

10 10
.o...o..o.
....o.....
....oo.oo.
..oooo..o.
....oo....
..o..o....
o..o....So
o....T....
....o.....
........oo

示例输出4

5