寄
#include<bits/stdc++.h>
using namespace std;
int s[55][55][4],n,m;
int b[55][55];
struct S{
int x,y,z;
};
queue<S>q;
bool e(int uu,int vv,int ww,int u,int v,int w){
if(u<0||u>n||v<0||v>m||s[u][v][w]<s[uu][vv][ww]+1||b[u][v]||(v&&b[u][v-1])||(u&&b[u-1][v])||(u&&v&&b[u-1][v-1])){
return false;
}
if(uu+3==u){
if(b[u-1][v]||(v&&b[u-1][v-1])||(u-1&&b[u-2][v])||(u-1&&v&&b[u-1][v-1])) return false;
}
if(u+3==uu){
if(b[u+1][v]||(v&&b[u+1][v-1])||(u+1&&b[u][v])||(u&&v&&b[u+1][v-1])) return false;
}
if(v+3==vv){
if(b[u][v+1]||(v+1&&b[u-1][v])||(u-1&&b[u-2][v+1])||(u-1&&v+1&&b[u-1][v])) return false;
}
if(vv+3==v){
if(b[u][v-1]||(v-1&&b[u-1][v-2])||(u-1&&b[u-2][v-1])||(u-1&&v-1&&b[u-1][v-2])) return false;
}
return true;
}
void r(int uu,int vv,int ww,int u,int v,int w){
s[u][v][w]=s[uu][vv][ww]+1;
q.push({u,v,w});
}
int main(){
memset(s,0x3f,sizeof s);
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&b[i][j]);
}
}
int ax,ay,bx,by,l;
char c;
scanf("%d %d %d %d %c",&ax,&ay,&bx,&by,&c);
switch(c){
case 'E':l=0;break;
case 'S':l=1;break;
case 'W':l=2;break;
case 'N':l=3;break;
}
q.push({ax,ay,l});
s[ax][ay][l]=0;
while(q.size()){
S p=q.front();
q.pop();
int u=p.x,v=p.y,w=p.z;
if(e(u,v,w,u,v,(w+1)%4)){
r(u,v,w,u,v,(w+1)%4);
}
if(e(u,v,w,u,v,(w+3)%4)){
r(u,v,w,u,v,(w+3)%4);
}
switch(w){
case 0:if(e(u,v,w,u,v+1,w)) r(u,v,w,u,v+1,w);if(e(u,v,w,u,v+2,w)) r(u,v,w,u,v+2,w);if(e(u,v,w,u,v+3,w)) r(u,v,w,u,v+3,w);break;
case 1:if(e(u,v,w,u+1,v,w)) r(u,v,w,u+1,v,w);if(e(u,v,w,u+2,v,w)) r(u,v,w,u+2,v,w);if(e(u,v,w,u+3,v,w)) r(u,v,w,u+3,v,w);break;
case 2:if(e(u,v,w,u,v-1,w)) r(u,v,w,u,v-1,w);if(e(u,v,w,u,v-2,w)) r(u,v,w,u,v-2,w);if(e(u,v,w,u,v-3,w)) r(u,v,w,u,v-3,w);break;
case 3:if(e(u,v,w,u-1,v,w)) r(u,v,w,u-1,v,w);if(e(u,v,w,u-2,v,w)) r(u,v,w,u-2,v,w);if(e(u,v,w,u-3,v,w)) r(u,v,w,u-3,v,w);break;
}
}
int r=min({s[bx][by][0],s[bx][by][1],s[bx][by][2],s[bx][by][3]});
if(r>1000000000) printf("-1");
else printf("%d",r);
// for(int i=0;i<=n;i++){
// for(int j=0;j<=m;j++){
// for(int k=0;k<4;k++){
// cout<<s[i][j][k]<<' ';
// }
// cout<<'|';
// }
// cout<<"\n";
// }
return 0;
}