你有一张排列在 $N \times M$ 网格上的藏宝图。网格中的每个格子要么是海洋,要么是岛屿的一部分。此外,地图上还标有宝藏和一艘占据一个(海洋)格子的敌方维京船。最后,为了方便起见,你还画出了自己当前的位置。
现在你必须设定一条固定的路线来获取宝藏。该路线必须从你的位置开始,在宝藏处结束,并由一系列移动组成。在每次移动中,你只能走到一个(水平或垂直)相邻且不属于岛屿的格子。但要小心:维京船可能会跟着你,并使用相同的移动方式!在你根据路线进行每次移动后,维京船可以选择移动或不移动。你的移动和维京船的反应合起来称为一个回合。
在每个回合结束后,会进行以下检查:
- 如果你与维京船处于同一条直线上(即你与维京船处于同一行或同一列,且你与维京船之间只有海洋),你就死了。
- 如果你没有死且到达了宝藏所在地,你就获得了宝藏。
编写一个程序,判断是否可以提前设定一条固定的路线,使得你沿着这条路线走能够获得宝藏,并且无论维京船如何移动,你都不会被维京人杀死。
输入格式
输入的第一行包含两个整数 $N$ 和 $M$,表示地图的尺寸。
接下来的 $N$ 行,每行包含 $M$ 个字符。每个字符描述地图中的一个格子,可以是 .(海洋)、I(岛屿的一部分)、V(维京船)、Y(你的位置)或 T(宝藏)。V、Y 和 T 中的每一个都恰好出现一次。
输出格式
输出的唯一一行必须包含字符串 YES(如果可以设定一条路线来获得宝藏)或 NO(否则)。
数据范围
$1 \le N, M \le 700$。
在价值 50 分的测试用例中,$1 \le N, M \le 200$。
样例
输入样例 1
5 7 Y.....V ..I.... ..IIIII ....... ...T...
输出样例 1
YES
输入样例 2
5 7 Y....V. ..I.... ..IIIII ....... ...T...
输出样例 2
NO
输入样例 3
2 3 .YT VII
输出样例 3
NO
说明
在第一个样例中,以下路线可以让你获得宝藏: 下,下,下,右,右,右,下。
在第二个和第三个样例中,不存在一条能让你存活并获得宝藏的路线。