#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
int n, m;
char s[37][37];
int mxs, mys, gxs, gys, xf, yf;
int ans = -1;
struct node {
int mx, my, gx, gy, step;
};
bool flag[37][37][37][37];
queue <node> q;
inline bool exist(int x, int y) {
return x >= 1 && x <= n && y >= 1 && y <= m && s[x][y] != 'X';
}
inline bool check(int mx, int my, int gx, int gy) {
return mx == xf && my == yf && gx == xf && gy == yf;
}
inline bool work(int mx, int my, int gx, int gy, int umx, int umy, int ugx, int ugy, int step) {
//cout << mx << " " << my << " " << gx << " " << gy << " " << step << endl;
if (s[mx][my] == '#') mx = umx, my = umy;
if (s[gx][gy] == '#') gx = ugx, gy = ugy;
if (exist(mx, my) && exist(gx, gy) && ! flag[mx][my][gx][gy]) {
flag[mx][my][gx][gy] = 1;
ans = step + 1;
q.push((node) {mx, my, gx, gy, ans});
if (check(mx, my, gx, gy)) return 1;
}
return 0;
}
inline void bfs() {
q.push((node) {mxs, mys, gxs, gys, 0});
while (! q.empty()) {
node u = q.front();
q.pop();
int mnx, mny, gnx, gny;
mnx = u.mx + dx[0];//上
mny = u.my + dy[0];
gnx = u.gx + dx[0];
gny = u.gy + dy[0];
if (work(mnx, mny, gnx, gny, u.mx, u.my, u.gx, u.gy, u.step)) return ;
mnx = u.mx + dx[1];//下
mny = u.my + dy[1];
gnx = u.gx + dx[1];
gny = u.gy + dy[1];
if (work(mnx, mny, gnx, gny, u.mx, u.my, u.gx, u.gy, u.step)) return ;
mnx = u.mx + dx[2];//右
mny = u.my + dy[2];
gnx = u.gx + dx[3];
gny = u.gy + dy[3];
if (work(mnx, mny, gnx, gny, u.mx, u.my, u.gx, u.gy, u.step)) return ;
mnx = u.mx + dx[3];//左
mny = u.my + dy[3];
gnx = u.gx + dx[2];
gny = u.gy + dy[2];
if (work(mnx, mny, gnx, gny, u.mx, u.my, u.gx, u.gy, u.step)) return ;
}
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i ++) {
scanf("%s", s[i] + 1);
for (int j = 1; j <= m; j ++) {
if (s[i][j] == 'M') mxs = i, mys = j;
if (s[i][j] == 'G') gxs = i, gys = j;
if (s[i][j] == 'T') xf = i, yf = j;
}
}
bfs();
if (ans == -1)
printf("no\n");
else
printf("%d\n", ans);
return 0;
}
90pts,WA#1,和第一篇题解对照感觉没啥问题了