#include<iostream>#include<algorithm>#include<cstring>usingnamespace std;int n, m;char map[60][60];bool st1[60][60], st2[60][60];int dirx[]={-1,0,1,0};int diry[]={0,1,0,-1};boolcheckin(int x,int y,int i){char c = map[x][y];if(c =='+'|| c =='S'|| c =='T')returntrue;if(c =='-'&& i %2==1)returntrue;if(c =='|'&& i %2==0)returntrue;if(c =='.'&& i ==2)returntrue;returnfalse;}voiddfs1(int x,int y){
st1[x][y]=true;for(int i =0; i <4; i++){int a = x + dirx[i];int b = y + diry[i];if( a <0|| a >= n || b <0|| b >= m || map[a][b]=='#'){continue;}if(st1[a][b]){continue;}if(checkin(x, y, i)){//判断(x, y) 能不能沿着i方向走 (x, y) --> (a, b);dfs1(a , b);}}}voiddfs2(int x,int y){
st2[x][y]=true;for(int i =0; i <4; i++){int a = x + dirx[i];int b = y + diry[i];if(a <0|| a >= n || b <0|| b >= n || map[x][y]=='#'){continue;}if(st2[a][b]){continue;}if(checkin(a, b, i ^2)){//判断(a, b) 能不能沿着i方向走 (a, b) --> (x, y);dfs2(a, b);}}}intmain(){
cin >> n >> m;for(int i =0; i < n; i++){
cin >> map[i];}int x, y;for(int i =0; i < n; i++){for(int j =0; j < m; j ++){if(map[i][j]=='S'){dfs1(i, j);}elseif(map[i][j]=='T'){
x = i;
y = j;dfs2(x, y);}}}if(!st1[x][y]){//说明从起点出发到不了终点
cout <<"I'm stuck!"<< endl;}else{int ans =0;for(int i =0; i < n; i++){for(int j =0; j < m; j++){if(st1[i][j]&&!st2[i][j]){
ans++;}}}
cout << ans <<endl;}return0;}/*
5 5
--+-+
..|#.
..|##
S-+-T
####.
*/