#include<bits/stdc++.h> using namespace std; int n,m,c,a[100011],x,y,x1x,y1y; char q[1000][1000]; struct Node{ int x,y,t; }; queue<Node> q; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>q[i][j]; //c[i][j]=INT_MAX; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(q[i][j]=='S'){ x=i; y=j; } if(q[i][j]=='E'){ x1x=i; y1y=j; } } } q.push({x,y,0}); while(!q.empty()){ int x=q.front().x; int y=q.front().y; int t=q.front().t+1; int fx[5]={0,1,0,-1,0}; int fy[5]={1,0,-1,0,0}; for(int i=0;i<=3;i++){ int tx=a+fx[i]; int ty=b+fy[i]; if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&q[tx][ty]!='#'){ //if(tx==x1x&&ty==y1y) f=true; q[tx][ty]='#'; q.push({tx,ty,t}); if(tx==x1x&&ty==y1y){ cout<<t*c; return 0; } } // if(x-1==m){ // cout<<step+1; // return 0; // } // else{ // q.push({x-1,step+1}); // } // if(x+1==m){ // cout<<step+1; // return 0; // } // else{ // q.push({x+1,step+1}); // } // if(x*2==m){ // cout<<step+1; // return 0; // } // else{ // q.push({x*2,step+1}); // } q.pop(); } cout<<-1; return 0; } /************************************************************** Problem: 2109 User: chenyubo Language: C Result: Compile Error ****************************************************************/