14066 - Mzc和男家丁的游戏

mzc 家十分有钱,他家里有若干个男家丁。有一天,他们把家丁们召集在一起,决定玩捉迷藏游戏。现在 mzc 要亲自去找他的男家丁,请你帮助他计算最短需要移动多少步才能找到任意一个男家丁。

游戏在一个 n m 列的网格上进行,每个格子可能是:

  • m:表示 mzc 的初始位置
  • d:表示一个男家丁的位置(可能有多个)
  • #:表示障碍物,不能通行
  • .:表示空地,可以通行

mzc 每次可以向上、下、左、右四个方向移动一格,但不能走出网格或进入障碍物格子。他需要到达任意一个 d 格子即可抓住男家丁。

请你输出 mzc 到达最近的一个男家丁所需的最少移动步数。如果所有男家丁都无法到达,则输出 No Way!

输入

第一行包含两个整数 n m ( 3 \le n, m \le 2000 ),分别表示网格的行数和列数。

接下来 n 行,每行包含一个长度为 m 的字符串,由字符 md#. 组成。保证网格中恰好有一个 m 和至少一个 d

输出

如果 mzc 可以到达某个男家丁,则输出一个整数,表示最短移动步数。

否则输出 No Way!

样例

输入

5 6
.#..#.
....#.
d.....
#####.
m.....

输出

12

提示

样例说明

mzc 位于 (5,1)(假设行列从1开始),一个男家丁位于 (3,1),但由于障碍物阻挡,需要绕行,最短路径长度为 12。

数据范围与约定

  • 3 \le n, m \le 2000
  • 网格中仅包含 md#.
  • 恰好有一个 m,至少有一个 d
时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题