#include<iostream>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
queue<int>qx,qy,qz;//上是1,右是2,下是3,左是4
int b[101][101],a[101][101]={0},f[101][101]={0},n,m,sx,sy,ex,ey;
char c;
string s;
int main(){
//freopen("bird.in","r",stdin);
//freopen("bird.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>b[i][j];
if(b[i][j]==1){
a[i+1][j+1]=1,a[i][j+1]=1,a[i+1][j]=1,a[i][j]=1;
}
}
}
for(int i=1;i<=n+1;i++){
for(int j=1;j<=m+1;j++){
f[i][j]=1e9;
}
}
cin>>sx>>sy>>ex>>ey>>c;
sx+=1,sy+=1,ex+=1,ey+=1;
f[sx][sy]=0;
qx.push(sx),qy.push(sy);
if(c=='N')qz.push(1);
if(c=='E')qz.push(2);
if(c=='S')qz.push(3);
if(c=='W')qz.push(4);
while(qx.empty()==0){
int fx=qx.front(),fy=qy.front(),fz=qz.front();
int t=f[fx][fy];
if(fx==6&&fy==5)cout<<t<<endl;
qx.pop(),qy.pop(),qz.pop();
if(fz==1){
if(a[fx-1][fy]==0&&fx>1){
if(t+1<f[fx-1][fy])f[fx-1][fy]=t+1,qx.push(fx-1),qy.push(fy),qz.push(1);
}
if(a[fx-2][fy]==0&&fx>2){
if(t+1<f[fx-2][fy])f[fx-2][fy]=t+1,qx.push(fx-2),qy.push(fy),qz.push(1);
}
if(a[fx-3][fy]==0&&fx>3){
if(t+1<f[fx-3][fy])f[fx-3][fy]=t+1,qx.push(fx-3),qy.push(fy),qz.push(1);
}
if(a[fx][fy-1]==0&&fy>1){
if(t+2<f[fx][fy-1])f[fx][fy-1]=t+2,qx.push(fx),qy.push(fy-1),qz.push(4);
}
if(a[fx][fy-2]==0&&fy>2){
if(t+2<f[fx][fy-2])f[fx][fy-2]=t+2,qx.push(fx),qy.push(fy-2),qz.push(4);
}
if(a[fx][fy-3]==0&&fy>3){
if(t+2<f[fx][fy-3])f[fx][fy-3]=t+2,qx.push(fx),qy.push(fy-3),qz.push(4);
}
if(a[fx][fy+1]==0&&fy+1<=m+1){
if(t+2<f[fx][fy+1])f[fx][fy+1]=t+2,qx.push(fx),qy.push(fy+1),qz.push(2);
}
if(a[fx][fy+2]==0&&fy+2<=m+1){
if(t+2<f[fx][fy+2])f[fx][fy+2]=t+2,qx.push(fx),qy.push(fy+2),qz.push(2);
}
if(a[fx][fy+3]==0&&fy+3<=m+1){
if(t+2<f[fx][fy+3])f[fx][fy+3]=t+2,qx.push(fx),qy.push(fy+3),qz.push(2);
}
if(a[fx+1][fy]==0&&fx+1<=n+1){
if(t+3<f[fx+1][fy])f[fx+1][fy]=t+3,qx.push(fx+1),qy.push(fy),qz.push(3);
}
if(a[fx+2][fy]==0&&fx+2<=n+1){
if(t+3<f[fx+2][fy])f[fx+2][fy]=t+3,qx.push(fx+2),qy.push(fy),qz.push(3);
}
if(a[fx+3][fy]==0&&fx+3<=n+1){
if(t+3<f[fx+3][fy])f[fx+3][fy]=t+3,qx.push(fx+3),qy.push(fy),qz.push(3);
}
}
if(fz==2){
if(a[fx][fy+1]==0&&fy+1<=m+1){
if(t+1<f[fx][fy+1])f[fx][fy+1]=t+1,qx.push(fx),qy.push(fy+1),qz.push(2);
}
if(a[fx][fy+2]==0&&fy+2<=m+1){
if(t+1<f[fx][fy+2])f[fx][fy+2]=t+1,qx.push(fx),qy.push(fy+2),qz.push(2);
}
if(a[fx][fy+3]==0&&fy+3<=m+1){
if(t+1<f[fx][fy+3])f[fx][fy+3]=t+1,qx.push(fx),qy.push(fy+3),qz.push(2);
}
if(a[fx-1][fy]==0&&fx>1){
if(t+2<f[fx-1][fy])f[fx-1][fy]=t+2,qx.push(fx-1),qy.push(fy),qz.push(1);
}
if(a[fx-2][fy]==0&&fx>2){
if(t+2<f[fx-2][fy])f[fx-2][fy]=t+2,qx.push(fx-2),qy.push(fy),qz.push(1);
}
if(a[fx-3][fy]==0&&fx>3){
if(t+2<f[fx-3][fy])f[fx-3][fy]=t+2,qx.push(fx-3),qy.push(fy),qz.push(1);
}
if(a[fx+1][fy]==0&&fx+1<=n+1){
if(t+2<f[fx+1][fy])f[fx+1][fy]=t+2,qx.push(fx+1),qy.push(fy),qz.push(3);
}
if(a[fx+2][fy]==0&&fx+2<=n+1){
if(t+2<f[fx+2][fy])f[fx+2][fy]=t+2,qx.push(fx+2),qy.push(fy),qz.push(3);
}
if(a[fx+3][fy]==0&&fx+3<=n+1){
if(t+2<f[fx+3][fy])f[fx+3][fy]=t+2,qx.push(fx+3),qy.push(fy),qz.push(3);
}
if(a[fx][fy-1]==0&&fy>1){
if(t+3<f[fx][fy-1])f[fx][fy-1]=t+3,qx.push(fx),qy.push(fy-1),qz.push(4);
}
if(a[fx][fy-2]==0&&fy>2){
if(t+3<f[fx][fy-2])f[fx][fy-2]=t+3,qx.push(fx),qy.push(fy-2),qz.push(4);
}
if(a[fx][fy-3]==0&&fy>3){
if(t+3<f[fx][fy-3])f[fx][fy-3]=t+3,qx.push(fx),qy.push(fy-3),qz.push(4);
}
}
if(fz==3){
if(a[fx+1][fy]==0&&fx+1<=n+1){
if(t+1<f[fx+1][fy])f[fx+1][fy]=t+1,qx.push(fx+1),qy.push(fy),qz.push(3);
}
if(a[fx+2][fy]==0&&fx+2<=n+1){
if(t+1<f[fx+2][fy])f[fx+2][fy]=t+1,qx.push(fx+2),qy.push(fy),qz.push(3);
}
if(a[fx+3][fy]==0&&fx+3<=n+1){
if(t+1<f[fx+3][fy])f[fx+3][fy]=t+1,qx.push(fx+3),qy.push(fy),qz.push(3);
}
if(a[fx][fy-1]==0&&fy>1){
if(t+2<f[fx][fy-1])f[fx][fy-1]=t+2,qx.push(fx),qy.push(fy-1),qz.push(4);
}
if(a[fx][fy-2]==0&&fy>2){
if(t+2<f[fx][fy-2])f[fx][fy-2]=t+2,qx.push(fx),qy.push(fy-2),qz.push(4);
}
if(a[fx][fy-3]==0&&fy>3){
if(t+2<f[fx][fy-3])f[fx][fy-3]=t+2,qx.push(fx),qy.push(fy-3),qz.push(4);
}
if(a[fx][fy+1]==0&&fy+1<=m+1){
if(t+2<f[fx][fy+1])f[fx][fy+1]=t+2,qx.push(fx),qy.push(fy+1),qz.push(2);
}
if(a[fx][fy+2]==0&&fy+2<=m+1){
if(t+2<f[fx][fy+2])f[fx][fy+2]=t+2,qx.push(fx),qy.push(fy+2),qz.push(2);
}
if(a[fx][fy+3]==0&&fy+3<=m+1){
if(t+2<f[fx][fy+3])f[fx][fy+3]=t+2,qx.push(fx),qy.push(fy+3),qz.push(2);
}
if(a[fx-1][fy]==0&&fx>1){
if(t+3<f[fx-1][fy])f[fx-1][fy]=t+3,qx.push(fx-1),qy.push(fy),qz.push(1);
}
if(a[fx-2][fy]==0&&fx>2){
if(t+3<f[fx-2][fy])f[fx-2][fy]=t+3,qx.push(fx-2),qy.push(fy),qz.push(1);
}
if(a[fx-3][fy]==0&&fx>3){
if(t+3<f[fx-3][fy])f[fx-3][fy]=t+3,qx.push(fx-3),qy.push(fy),qz.push(1);
}
}
if(fz==4){
if(a[fx][fy-1]==0&&fy>1){
if(t+1<f[fx][fy-1])f[fx][fy-1]=t+1,qx.push(fx),qy.push(fy-1),qz.push(4);
}
if(a[fx][fy-2]==0&&fy>2){
if(t+1<f[fx][fy-2])f[fx][fy-2]=t+1,qx.push(fx),qy.push(fy-2),qz.push(4);
}
if(a[fx][fy-3]==0&&fy>3){
if(t+1<f[fx][fy-3])f[fx][fy-3]=t+1,qx.push(fx),qy.push(fy-3),qz.push(4);
}
if(a[fx-1][fy]==0&&fx>1){
if(t+2<f[fx-1][fy])f[fx-1][fy]=t+2,qx.push(fx-1),qy.push(fy),qz.push(1);
}
if(a[fx-2][fy]==0&&fx>2){
if(t+2<f[fx-2][fy])f[fx-2][fy]=t+2,qx.push(fx-2),qy.push(fy),qz.push(1);
}
if(a[fx-3][fy]==0&&fx>3){
if(t+2<f[fx-3][fy])f[fx-3][fy]=t+2,qx.push(fx-3),qy.push(fy),qz.push(1);
}
if(a[fx+1][fy]==0&&fx+1<=n+1){
if(t+2<f[fx+1][fy])f[fx+1][fy]=t+2,qx.push(fx+1),qy.push(fy),qz.push(3);
}
if(a[fx+2][fy]==0&&fx+2<=n+1){
if(t+2<f[fx+2][fy])f[fx+2][fy]=t+2,qx.push(fx+2),qy.push(fy),qz.push(3);
}
if(a[fx+3][fy]==0&&fx+3<=n+1){
if(t+2<f[fx+3][fy])f[fx+3][fy]=t+2,qx.push(fx+3),qy.push(fy),qz.push(3);
}
if(a[fx][fy+1]==0&&fy+1<=m+1){
if(t+3<f[fx][fy+1])f[fx][fy+1]=t+3,qx.push(fx),qy.push(fy+1),qz.push(2);
}
if(a[fx][fy+2]==0&&fy+2<=m+1){
if(t+3<f[fx][fy+2])f[fx][fy+2]=t+3,qx.push(fx),qy.push(fy+2),qz.push(2);
}
if(a[fx][fy+3]==0&&fy+3<=m+1){
if(t+3<f[fx][fy+3])f[fx][fy+3]=t+3,qx.push(fx),qy.push(fy+3),qz.push(2);
}
}
}
for(int i=1;i<=n+1;i++){
for(int j=1;j<=m+1;j++){
if(f[i][j]==1e9)cout<<-1<<" ";
else cout<<f[i][j]<<" ";
}
cout<<endl;
}
return 0;
}