#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int rd(){
int s=0,w=1;char ch=getchar();
while(ch<48||ch>57){if(ch==45)w=-1;ch=getchar();}
while(ch>47&&ch<58)s=(s<<3)+(s<<1)+ch-48,ch=getchar();
return s*w;
}
const int N=59;
bool mp[N][N];
struct node{
int x,y,d,t;
};
vector<pair<int,int> > vis[N][N];
queue<node> q;
int n,m,si,sj,ei,ej,dir;
inline bool judge(int x,int y,int d,int t){
if(x<1 || y<1 || x>n || y>m) return 0;
if(mp[x][y]) return 0;
if(!vis[x][y].empty()){
for(int i=0;i<vis[x][y].size();++i){
int fd=vis[x][y][i].first;
int st=vis[x][y][i].second;
if(fd==d) return 0;
if((fd-d+4)%4==1 && t<=st-1) return 0;
if((fd-d+4)%4==2 && t<=st-2) return 0;
}
}
return 1;
}
inline bool in(int x,int y,int d,int t){
if(judge(x,y,d,t)){
if(x==ei && y==ej){
cout<<t;
exit(0);
}
q.push(node{x,y,d,t});
vis[x][y].push_back(make_pair(d,t));
return 1;
}
return 0;
}
signed main(){
n=rd(),m=rd();
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
mp[i][j]=rd();
if(mp[i][j]){
mp[i-1][j]=1;
mp[i][j-1]=1;
mp[i-1][j-1]=1;
}
}
}
sj=rd(),si=rd(),ej=rd(),ei=rd();
char ct=getchar();
if(ct=='N') dir=0;
else if(ct=='W') dir=1;
else if(ct=='S') dir=2;
else dir=3;
in(si,sj,dir,0);
while(!q.empty()){
node nt=q.front();
q.pop();
int x=nt.x,y=nt.y;
int d=nt.d,t=nt.t;
++t;
in(x,y,(d+1)%4,t);
in(x,y,(d+3)%4,t);
if(!d){
if(in(x-1,y,d,t))
if(in(x-2,y,d,t))
in(x-3,y,d,t);
}else if(d==1){
if(in(x,y-1,d,t))
if(in(x,y-2,d,t))
in(x,y-3,d,t);
}else if(d==2){
if(in(x+1,y,d,t))
if(in(x+2,y,d,t))
in(x+3,y,d,t);
}else{
if(in(x,y+1,d,t))
if(in(x,y+2,d,t))
in(x,y+3,d,t);
}
}
puts("-1");
}
6 7
0 0 0 0 0 0 0
0 0 0 0 1 0 0
0 0 1 0 0 0 0
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 0
1 1 1 6 E
我真的觉得是输出3,但是答案为什么是11啊