#include<iostream>
#include<queue>
using namespace std;
int n,m,a[55][55],dis[55][55][5],vis[55][55][5];
const int dx[6]={0,1,0,-1,0},
dy[6]={0,0,-1,0,1},
ffx[5]={0,3,4,1,2};
struct node{
int x,y,fx;
};
node s,e;
inline bool ok(int x,int y){
return x>=1&&x<=n&&y>=1&&y<=m;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j])a[i-1][j]=a[i][j-1]=a[i-1][j-1]=1;
}
}
//cout<<"OK";
char c;
cin>>s.x>>s.y>>e.x>>e.y>>c;
if(c=='E')s.fx=1;
else if(c=='S')s.fx=2;
else if(c=='W')s.fx=3;
else s.fx=4;
queue<node> q;
q.push(s);
vis[s.x][s.y][s.fx]=1;
dis[s.x][s.y][s.fx]=0;
while(!q.empty()){
node nn=q.front();
q.pop();
//cout<<nn.x<<" "<<nn.y<<" "<<nn.fx<<"\n";
if(nn.x==e.x&&nn.y==e.y){
break;
}
for(int i=1;i<=4;i++){
if(!vis[nn.x][nn.y][i]&&i!=nn.fx&&i!=ffx[nn.fx]){
//cout<<1;
vis[nn.x][nn.y][i]=1;
dis[nn.x][nn.y][i]=dis[nn.x][nn.y][nn.fx]+1;
q.push((node){nn.x,nn.y,i});
}
}
for(int i=1;i<=3;i++){
int nx=nn.x+dy[nn.fx]*i,ny=nn.y+dy[nn.fx]*i;
if(ok(nx,ny)&&!vis[nx][ny][nn.fx]&&!a[nx][ny]){
//cout<<nx<<" "<<ny<<"\n";
vis[nx][ny][nn.fx]=1;
dis[nx][ny][nn.fx]=dis[nn.x][nn.y][nn.fx]+1;
q.push((node){nx,ny,nn.fx});
}
}
}
int ans=0x3f3f3f3f;
for(int i=1;i<=4;i++){
ans=min(ans,dis[e.x][e.y][i]);
}
cout<<ans;
return 0;
}
总是输出0.