import java.util.Scanner;
public class migong {
static int res=0;
static int min=0;
static int dx[]={0,0,1,-1};
static int dy[]={1,-1,0,0};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
sc.nextLine();
int[][] visit=new int[n][m];
String[] mp=new String[n];
for(int i=0;i<n;i++){
mp[i]=sc.nextLine();
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(mp[i].charAt(j)=='S'){
visit[i][j]=1;
dfs(mp,n,m,i,j,visit,0);
break;
}
}
}
if(res==1){
System.out.println("YES");
System.out.println(min);
}else{
System.out.println("NO");
}
}
private static void dfs(String[] mp,int n,int m,int x0, int y0,int[][] visit,int step) {
if(mp[x0].charAt(y0)=='T'){
res=1;//迷宫是否能走通
min=Math.min(Integer.MAX_VALUE,step);//走通迷宫的最小路径数
System.out.println(min);//每次走通迷宫的路径数
return;
}
for(int i=0;i<4;i++){
int x=x0+dx[i];
int y=y0+dy[i];
if(x>=0&&x<n&&y>=0&&y<m&&visit[x][y]==0&&mp[x].charAt(y)!='*'){
visit[x][y]=1;
System.out.print("("+x+","+y+")"+"->");
dfs(mp,n,m,x,y,visit,step+1);
visit[x][y]=0;
System.out.println("回退一步");
}
}
}
}
Input:
4 4
S..*
...*
.***
...T
Output:
(0,1)->(0,2)->(1,2)->(1,1)->(1,0)->(2,0)->(3,0)->(3,1)->(3,2)->(3,3)->10
回退一步
回退一步
回退一步
回退一步
回退一步
回退一步
回退一步
回退一步
回退一步
(1,1)->(1,2)->(0,2)->回退一步
回退一步
(1,0)->(2,0)->(3,0)->(3,1)->(3,2)->(3,3)->8
回退一步
回退一步
回退一步
回退一步
回退一步
回退一步
回退一步
回退一步
(1,0)->(1,1)->(1,2)->(0,2)->(0,1)->回退一步
回退一步
回退一步
(0,1)->(0,2)->(1,2)->回退一步
回退一步
回退一步
回退一步
(2,0)->(3,0)->(3,1)->(3,2)->(3,3)->6
回退一步
回退一步
回退一步
回退一步
回退一步
回退一步
YES
6
Process finished with exit code 0