P3855 [TJOI2008] Binary Land
题目背景
Binary Land 是一款任天堂红白机上的经典游戏,讲述的是两只相爱的企鹅 Gurin 和 Malon 的故事。两只企鹅在一个封闭的迷宫中,你可以控制他们向上下左右四个方向移动。但是他们的移动有一个奇怪的规则,即如果你按“上”或“下”方向键,两只企鹅会同时向上移动或向下移动 $1$ 格;如果你按“左”方向键,则 Malon 向左移动 $1$ 格,同时 Gurin 向右移动 $1$ 格;如果你按“右”方向键,则 Malon 向右移动 $1$ 格,Gurin 向左移动 $1$ 格。当然,如果某只企鹅被障碍挡住,它就不会移动了。另外,在迷宫的某些格子处有蜘蛛网,如果任何一只企鹅进入这种格子,则游戏失败。两只企鹅不会相互阻挡,即在相向运动时他们可以“穿过”彼此,也可以同时处于同一格子里。迷宫的某个格子上有一颗红心,游戏的任务就是使两只企鹅同时到达这个格子。

题目描述
请编写程序找出完成任务所需的最少的操作步数。如果无法完成目标,输出 `no`。
输入格式
第一行包含两个整数 $R,C$ 表示迷宫的长和宽。
按下来有 $R$ 行,每行包含 $C$ 个字符,描述了一个迷宫。其中 `#` 表示企鹅不能通过的障碍物,`X` 表示蜘蛛网,`.` 表示空地,`G` 表示 Gurin 的初始位置,`M` 表示 Malon 的初始位置,`T` 表示终点位置。
输入数据保证标有 `G`,`M`,`T` 的格子分别只有一个,保证企鹅不可能走到迷宫以外。
输出格式
输出只有一行,为最少的操作步数。如果不能完成任务,输出 `no`。
说明/提示
满足要求的一个操作序列为:上-右-左-左。
$3 ≤ R, C ≤ 30$。