#include<bits/stdc++.h> # define fi first # define se second using namespace std; const int MAXN=1e3+10; const int INF = 0x313f3f3f; typedef pair<int,int> P; char s[MAXN][MAXN]; int n,m; int dir[2][4]= {{1,-1,0,0},{0,0,1,-1}}; int dis[2][MAXN][MAXN]; void bfs(int p,int a,int b){ memset(dis[p],INF,sizeof(dis[p])); dis[p][a][b]=0; queue<pair <P,int> > q; q.push({{a,b},0}); while(!q.empty()) { int x=q.front().fi.fi, y=q.front().fi.se, d=q.front().se; q.pop(); for(int i=0; i<4; i++) { int dx=x+dir[0][i], dy=y+dir[1][i]; if (dx<1||dy<1||dx>n||dy>m||s[dx][dy]=='#') continue; if(___(1)___) { ___(2)___; ___(3)___; } } } } int main(void) { while(scanf("%d%d",&n,&m)!=EOF) { int ans=INF; scanf("%d%d",&n,&m); for (int i=1; i<=n; i++) scanf("%s",s[i]+1); for(int i=1; i<=n; i++) for (int j=1; j<=m; j++) if(s[i][j]=='S') bfs(0,i,j); else if(s[i][j]=='E') ___(4)___; for(int i=1; i<=n; i++) for (int j=1; j<=m; j++) if(s[i][j]=='K') ans=___(5)___; if(ans==INF) ans=-1; printf("%d\n",ans); } return 0; }