#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <string>
#define NORTH 0
#define EAST 1
#define SOUTH 2
#define WEST 3
using namespace std;
struct State{
int x,y,dir;
int val;
};
int r,c;
int gr[55][55][4];
string face;
int bx,by,ex,ey;
void bfs()
{
int dir;
queue<int> q;
if(face=="south")
dir=SOUTH;
else if(face=="north")
dir=NORTH;
else if(face=="east")
dir=EAST;
else if(face=="west")
dir=WEST;
q.push(bx);q.push(by);q.push(dir);q.push(0);
int x,y,d,v;
while(!q.empty())
{
x = q.front();q.pop();
y = q.front();q.pop();
d = q.front();q.pop();
v = q.front();q.pop();
//cout<<x<<" "<<y<<"\n";
gr[x][y][d]=1;
if(ex==x && ey==y)
{
printf("%d\n",v);return;
}
if(d==NORTH)
{
if(gr[x][y][WEST]==0)
{
q.push(x);q.push(y);
q.push(WEST);
q.push(v+1);
}
if(gr[x][y][EAST]==0)
{
q.push(x);q.push(y);
q.push(EAST);
q.push(v+1);
}
if(x-1>0 && gr[x-1][y][d]==0)
{
q.push(x-1);q.push(y);q.push(d);
q.push(v+1);
}
if(x-2>0 && gr[x-2][y][d]==0 && gr[x-1][y][d]==0)
{
q.push(x-2);q.push(y);q.push(d);
q.push(v+1);
}
if(x-3>0 && gr[x-3][y][d]==0 && gr[x-2][y][d]==0 && gr[x-1][y][d]==0)
{
q.push(x-3);q.push(y);q.push(d);
q.push(v+1);
}
}
else if(d==EAST)
{
if(gr[x][y][NORTH]==0)
{
q.push(x);q.push(y);
q.push(NORTH);
q.push(v+1);
}
if(gr[x][y][SOUTH]==0)
{
q.push(x);q.push(y);
q.push(SOUTH);
q.push(v+1);
}
if(y+1<c && gr[x][y+1][d]==0)
{
q.push(x);q.push(y+1);q.push(d);
q.push(v+1);
}
if(y+2<c && gr[x][y+2][d]==0 && gr[x][y+1][d]==0)
{
q.push(x);q.push(y+2);q.push(d);
q.push(v+1);
}
if(y+3<c && gr[x][y+3][d]==0 && gr[x][y+2][d]==0 && gr[x][y+1][d]==0)
{
q.push(x);q.push(y+3);q.push(d);
q.push(v+1);
}
}
else if(d==WEST)
{
if(gr[x][y][NORTH]==0)
{
q.push(x);q.push(y);
q.push(NORTH);
q.push(v+1);
}
if(gr[x][y][SOUTH]==0)
{
q.push(x);q.push(y);
q.push(SOUTH);
q.push(v+1);
}
if(y-1>0 && gr[x][y-1][d]==0)
{
q.push(x);q.push(y-1);q.push(d);
q.push(v+1);
}
if(y-2>0 && gr[x][y-2][d]==0 && gr[x][y-1][d]==0)
{
q.push(x);q.push(y-2);q.push(d);
q.push(v+1);
}
if(y-3>0 && gr[x][y-3][d]==0 && gr[x][y-2][d]==0 && gr[x][y-1][d]==0)
{
q.push(x);q.push(y-3);q.push(d);
q.push(v+1);
}
}
else if(d==SOUTH)
{
if(gr[x][y][WEST]==0)
{
q.push(x);q.push(y);
q.push(WEST);
q.push(v+1);
}
if(gr[x][y][EAST]==0)
{
q.push(x);q.push(y);
q.push(EAST);
q.push(v+1);
}
if(x+1<r && gr[x+1][y][d]==0)
{
q.push(x+1);q.push(y);q.push(d);
q.push(v+1);
}
if(x+2<r && gr[x+2][y][d]==0 && gr[x+1][y][d]==0)
{
q.push(x+2);q.push(y);q.push(d);
q.push(v+1);
}
if(x+3<r && gr[x+3][y][d]==0 && gr[x+2][y][d]==0 && gr[x+1][y][d]==0)
{
q.push(x+3);q.push(y);q.push(d);
q.push(v+1);
}
}
}
printf("-1\n");return;
}
int main()
{
int a;
while(scanf("%d%d",&r,&c))
{
if(r+c==0)
break;
memset(gr,0,sizeof(gr));
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
scanf("%d",&a);
if(a)
{
for(int k=0;k<4;k++)
{
gr[i][j][k]=a;gr[i+1][j+1][k]=a;
gr[i+1][j][k]=a;gr[i][j+1][k]=a;
}
}
}
}
scanf("%d%d%d%d",&bx,&by,&ex,&ey);
cin>>face;
bfs();
}
return 0;
}