#include #define rep(i,a,n) for(int i=a;i=b;i--) #define all(a) a.begin(),a.end() #define o(a) cout< vi; typedef vector vvi; typedef pair pii; const int INF=1e7; int kdy[8]={2,2,1,1,-1,-1,-2,-2}; int kdx[8]={-1,1,-2,2,-2,2,-1,1}; int bdy[4]={1,1,-1,-1}; int bdx[4]={-1,1,-1,1}; struct data{ int y,x; bool k; data(int y, int x,int k):y(y),x(x),k(k){} }; char c[510][510]={}; int d[510][510][2]; signed main(){ int h,w; cin>>h>>w; int sy,sx,gy,gx; rep(i,0,h){ rep(j,0,w){ cin>>c[i][j]; if(c[i][j]=='S'){ sy=i; sx=j; }else if(c[i][j]=='G'){ gy=i; gx=j; } } } int f=1; rep(i,0,h) rep(j,0,w) rep(k,0,2) d[i][j][k]=INF; queue q; q.push(data(sy,sx,f)); d[sy][sx][1]=0; while(q.size()){ data p=q.front(); q.pop(); if(p.y==gy && p.x==gx) break; if(p.k){ rep(i,0,8){ int ny=p.y+kdy[i]; int nx=p.x+kdx[i]; if(0<=ny && ny