#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
struct node{
int rd,x,y,dis,vis;
}a[N][N];
int n,x1,y1,x2,y2;
int X[4] = {0,0,-1,1},Y[4] = {-1,1,0,0};
queue<node>q;
bool judge(int x_,int y_){
if(x_<=n&&y_<=n&&!a[x_][y_].rd&&!a[x_][y_].vis) return true;
return false;
}
void bfs(){
a[x1][y1].vis = 1;
q.push(a[x1][y1]);
while(!q.empty()){
int xx = q.front().x;
int yy = q.front().y;
q.pop();
for(int i=0;i<4;i++){
int xxx = xx + X[i];
int yyy = yy + Y[i];
if(judge(xxx,yyy)){
a[xxx][yyy].vis = 1;
a[xxx][yyy].dis = a[xx][yy].dis + 1;
q.push(a[xxx][yyy]);
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
string s;
cin>>s;
for(int j=0;j<n;j++){
a[i][j+1].rd = s[j] - '0';
a[i][j+1].x = i;
a[i][j+1].y = j+1;
a[i][j+1].dis = 0;
a[i][j+1].vis = 0;
}
}
cin>>x1>>y1>>x2>>y2;
bfs();
cout<<a[x2][y2].dis;
return 0;
}