#include<bits/stdc++.h>
using namespace std;
struct point{
int x,y,walk;
point() {};
point(int _x, int _y, int _walk) {
x = _x; y = _y; walk = _walk;
}
};
struct lambang{
int x,y; char tanda;
lambang() {};
lambang(int _x, int _y, char _tanda) {
x = _x; y = _y; tanda = _tanda;
}
};
point s,f,take;
int nn,mm;
char arr[1005][1005];
bool flag[1005][1005];
queue<point> q;
vector<lambang> vec;
bool bol;
void flood(int x, int y) {
if (bol) return;
if ((x>0)&&(y>0)&&(x<=nn)&&(y<=mm)) {
if (arr[x][y]=='T') { cout<<take.walk<<endl; bol=true; return; }
if (((arr[x][y]=='#')||(arr[x][y]=='S'))&&(flag[x][y])) {
flag[x][y]=false;
flood(x+1,y);
flood(x-1,y);
flood(x,y+1);
flood(x,y-1);
if (arr[x][y+1]=='.') vec.push_back(lambang(x,y+1,'2'));
if (arr[x][y-1]=='.') vec.push_back(lambang(x,y-1,'4'));
if (arr[x+1][y]=='.') vec.push_back(lambang(x+1,y,'3'));
if (arr[x-1][y]=='.') vec.push_back(lambang(x-1,y,'1'));
}
}
}
void straight(lambang t) {
if ((t.x>0)&&(t.y>0)&&(t.x<=nn)&&(t.y<=mm)) {
if ((arr[t.x][t.y]=='#')||(arr[t.x][t.y]=='T')) {
q.push(point(t.x,t.y,take.walk+1));
return;
}
if (t.tanda=='1') straight(lambang(t.x-1,t.y,'1'));
if (t.tanda=='2') straight(lambang(t.x,t.y+1,'2'));
if (t.tanda=='3') straight(lambang(t.x+1,t.y,'3'));
if (t.tanda=='4') straight(lambang(t.x,t.y-1,'4'));
}
}
int main() {
string ss;
getline(cin,ss);
scanf("%d %d\n",&nn,&mm);
for(int i=0; i<=1002; i++) {
for(int j=0; j<=1002; j++) {
arr[i][j]='!';
flag[i][j]=false;
}
}
for(int i=1; i<=nn; i++)
for(int j=1; j<=mm; j++) {
cin>>arr[i][j];
flag[i][j]=true;
if (arr[i][j]=='S') s.x=i,s.y=j;
if (arr[i][j]=='T') f.x=i,f.y=j;
}
q.push(point(s.x,s.y,0));
memset(flag,true,sizeof(flag));
bol=false;
while (!q.empty()) {
take=q.front(); q.pop(); vec.clear();
if (arr[take.x][take.y]=='T') {
cout<<take.walk<<endl;
return 0;
}
flood(take.x,take.y);
if (bol) return 0;
int size=vec.size();
for(int i=0; i<size; i++) {
straight(vec[i]);
}
vec.clear();
}
printf("-1\n");
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApzdHJ1Y3QgcG9pbnR7CiAgICBpbnQgeCx5LHdhbGs7CiAgICBwb2ludCgpIHt9OwogICAgcG9pbnQoaW50IF94LCBpbnQgX3ksIGludCBfd2FsaykgewogICAgICAgIHggPSBfeDsgeSA9IF95OyB3YWxrID0gX3dhbGs7CiAgICB9Cn07CiAKc3RydWN0IGxhbWJhbmd7CiAgICBpbnQgeCx5OyBjaGFyIHRhbmRhOwogICAgbGFtYmFuZygpIHt9OwogICAgbGFtYmFuZyhpbnQgX3gsIGludCBfeSwgY2hhciBfdGFuZGEpIHsKICAgICAgICB4ID0gX3g7IHkgPSBfeTsgdGFuZGEgPSBfdGFuZGE7CiAgICB9Cn07CiAKcG9pbnQgcyxmLHRha2U7CmludCBubixtbTsKY2hhciBhcnJbMTAwNV1bMTAwNV07CmJvb2wgZmxhZ1sxMDA1XVsxMDA1XTsKcXVldWU8cG9pbnQ+IHE7CnZlY3RvcjxsYW1iYW5nPiB2ZWM7CmJvb2wgYm9sOwogCnZvaWQgZmxvb2QoaW50IHgsIGludCB5KSB7CiAgICBpZiAoYm9sKSByZXR1cm47CiAgICBpZiAoKHg+MCkmJih5PjApJiYoeDw9bm4pJiYoeTw9bW0pKSB7CiAgICAgICAgaWYgKGFyclt4XVt5XT09J1QnKSB7ICAgY291dDw8dGFrZS53YWxrPDxlbmRsOyBib2w9dHJ1ZTsgcmV0dXJuOyB9CiAgICAgICAgaWYgKCgoYXJyW3hdW3ldPT0nIycpfHwoYXJyW3hdW3ldPT0nUycpKSYmKGZsYWdbeF1beV0pKSB7CiAgICAgICAgICAgIGZsYWdbeF1beV09ZmFsc2U7CiAgICAgICAgICAgIGZsb29kKHgrMSx5KTsKICAgICAgICAgICAgZmxvb2QoeC0xLHkpOwogICAgICAgICAgICBmbG9vZCh4LHkrMSk7CiAgICAgICAgICAgIGZsb29kKHgseS0xKTsKICAgICAgIAogICAgICAgICAgICBpZiAoYXJyW3hdW3krMV09PScuJykgdmVjLnB1c2hfYmFjayhsYW1iYW5nKHgseSsxLCcyJykpOwogICAgICAgICAgICBpZiAoYXJyW3hdW3ktMV09PScuJykgdmVjLnB1c2hfYmFjayhsYW1iYW5nKHgseS0xLCc0JykpOwogICAgICAgICAgICBpZiAoYXJyW3grMV1beV09PScuJykgdmVjLnB1c2hfYmFjayhsYW1iYW5nKHgrMSx5LCczJykpOwogICAgICAgICAgICBpZiAoYXJyW3gtMV1beV09PScuJykgdmVjLnB1c2hfYmFjayhsYW1iYW5nKHgtMSx5LCcxJykpOwogICAgICAgIH0KICAgIH0KfQogCiAKdm9pZCBzdHJhaWdodChsYW1iYW5nIHQpIHsKICAgIGlmICgodC54PjApJiYodC55PjApJiYodC54PD1ubikmJih0Lnk8PW1tKSkgewogICAgICAgIGlmICgoYXJyW3QueF1bdC55XT09JyMnKXx8KGFyclt0LnhdW3QueV09PSdUJykpIHsKICAgICAgICAgICAgcS5wdXNoKHBvaW50KHQueCx0LnksdGFrZS53YWxrKzEpKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodC50YW5kYT09JzEnKSAgc3RyYWlnaHQobGFtYmFuZyh0LngtMSx0LnksJzEnKSk7CiAgICAgICAgaWYgKHQudGFuZGE9PScyJykgIHN0cmFpZ2h0KGxhbWJhbmcodC54LHQueSsxLCcyJykpOwogICAgICAgIGlmICh0LnRhbmRhPT0nMycpICBzdHJhaWdodChsYW1iYW5nKHQueCsxLHQueSwnMycpKTsKICAgICAgICBpZiAodC50YW5kYT09JzQnKSAgc3RyYWlnaHQobGFtYmFuZyh0LngsdC55LTEsJzQnKSk7CiAgICB9Cn0KIAppbnQgbWFpbigpIHsKICAgIHN0cmluZyBzczsKICAgIGdldGxpbmUoY2luLHNzKTsKICAgIHNjYW5mKCIlZCAlZFxuIiwmbm4sJm1tKTsKICAgIGZvcihpbnQgaT0wOyBpPD0xMDAyOyBpKyspIHsKICAgICAgICBmb3IoaW50IGo9MDsgajw9MTAwMjsgaisrKSB7CiAgICAgICAgICAgIGFycltpXVtqXT0nISc7CiAgICAgICAgICAgIGZsYWdbaV1bal09ZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgZm9yKGludCBpPTE7IGk8PW5uOyBpKyspCiAgICAgICAgZm9yKGludCBqPTE7IGo8PW1tOyBqKyspIHsKICAgICAgICAgICAgY2luPj5hcnJbaV1bal07CiAgICAgICAgICAgIGZsYWdbaV1bal09dHJ1ZTsKICAgICAgICAgICAgaWYgKGFycltpXVtqXT09J1MnKSBzLng9aSxzLnk9ajsKICAgICAgICAgICAgaWYgKGFycltpXVtqXT09J1QnKSBmLng9aSxmLnk9ajsKICAgICAgICB9ICAKCQkKICAgIHEucHVzaChwb2ludChzLngscy55LDApKTsKICAgIG1lbXNldChmbGFnLHRydWUsc2l6ZW9mKGZsYWcpKTsKICAgIGJvbD1mYWxzZTsKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgdGFrZT1xLmZyb250KCk7IHEucG9wKCk7IHZlYy5jbGVhcigpOwogICAgICAgIGlmIChhcnJbdGFrZS54XVt0YWtlLnldPT0nVCcpIHsKICAgICAgICAgICAgY291dDw8dGFrZS53YWxrPDxlbmRsOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgZmxvb2QodGFrZS54LHRha2UueSk7CiAgICAgICAgaWYgKGJvbCkgcmV0dXJuIDA7CiAgICAgCiAgICAgICAgaW50IHNpemU9dmVjLnNpemUoKTsKICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8c2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAgICBzdHJhaWdodCh2ZWNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgdmVjLmNsZWFyKCk7CiAgICB9CiAgICBwcmludGYoIi0xXG4iKTsKfQ==