写法比较奇怪qwq
////////////////////////
///////////////////////
//////////////////////
/////////////////////
/////Author/////////
//////zyh//////////
//////////////////
/////////////////
////////////////
///////////////
//////////////
/////////////
////////////
#include<bits/stdc++.h>
#define EL putchar('\n')
#define SP putchar(' ')
using namespace std;
int read(){int x;scanf("%d",&x);return x;}
long long readll(){long long x;scanf("%lld",&x);return x;}
void print(int x){printf("%d",x);}
void print(long long x){printf("%lld",x);}
struct node
{
int x,y,dis,to;
node(int _x,int _y,int _to,int _dis=0){x=_x;y=_y;dis=_dis;to=_to;}
/*
to:
0:^
1:v
2:>
3:<
*/
};
int cton(char c)//方向字母变数字
{
if(c=='N')return 0;
if(c=='S')return 1;
if(c=='E')return 2;
if(c=='W')return 3;
}
int turnright(int x)//右转
{
if(x==0)return 2;
if(x==1)return 3;
if(x==2)return 1;
if(x==3)return 0;
}
int turnleft(int x)//左转
{
if(x==0)return 3;
if(x==1)return 2;
if(x==2)return 0;
if(x==3)return 1;
}
node Creep(node x)//走一步
{
if(x.to==0)x.y+=1;
if(x.to==1)x.y-=1;
if(x.to==2)x.x+=1;
if(x.to==3)x.x-=1;
return x;
}
queue<node>q;
bitset<60>b[60][4]/*判走过*/,c[60]/*判障碍*/;
int n,m,x,y,tx,ty;
char ch;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int a=read();
if(a==1)
{
c[i][j]=c[i][j+1]=c[i+1][j+1]=c[i+1][j]=1;//考虑交点不考虑格子
}
}
}
cin>>x>>y>>tx>>ty>>ch;
q.push(node(x,y,cton(ch)));//start
b[x][y][cton(ch)]=1;
while(!q.empty())
{
node t=q.front();
q.pop();
cout<<t.x<<" "<<t.y<<" "<<t.to<<" "<<t.dis<<endl; //调试
if(t.x==tx&&t.y==ty)//搜到输出
{
cout<<t.dis;
return 0;
}
if(!b[t.x][t.y][turnright(t.to)])//右转没走过
{
q.push(node(t.x,t.y,turnright(t.to),t.dis+1));//右转
b[t.x][t.y][turnright(t.to)]=1;
}
if(!b[t.x][t.y][turnleft(t.to)])//左转没走过
{
q.push(node(t.x,t.y,turnleft(t.to),t.dis+1));//左转
b[t.x][t.y][turnright(t.to)]=1;
}
node temp=t;
for(int i=1;i<=3;i++)//可以 走三步
{
temp=Creep(temp);//前进一步
if(temp.x<1||temp.x>=n||temp.y<1||temp.y>=m||c[temp.x][temp.y])break;//遇到障碍停
if(!b[temp.x][temp.y][temp.to])//假如没走过
{
q.push(node(temp.x,temp.y,temp.to,t.dis+1));//那我走
b[temp.x][temp.y][temp.to]=1;
}
}
}
return 0;
}