const
w:array[1..4,1..2]of integer=((-1,0),(1,0),(0,-1),(0,1));
var
map:array[1..1000,1..1000]of char;
f:array[1..1000,1..1000]of boolean;
i,j:longint;
n,si,sj,ei,ej:integer;
q:array[1..1000000,1..3]of longint;
h,t:longint;
k:integer;
begin
readln(n);
for i:=1 to n do begin for j:=1 to n do read(map[i,j]);readln;end;
fillchar(f,sizeof(f),true);
readln(si,sj);
readln(ei,ej);
h:=0;t:=1;
q[t,1]:=si;q[t,2]:=sj;q[t,3]:=0;
while h<>t do
begin
h:=h+1;
si:=q[h,1];sj:=q[h,2];
for k:=1 to 4 do
begin
i:=si+w[k,1];
j:=sj+w[k,2];
if (i=ei) and (j=ej) then begin writeln(q[h,3]+1);halt;end;
if (map[i,j]='0') and (f[i,j]) then
begin
t:=t+1;
q[t,1]:=i;
q[t,2]:=j;
q[t,3]:=q[h,3]+1;
f[i,j]:=false;
end;
end;
end;
end.
program p34;
const
x1:array[1..4]of longint=(0,-1,0,1);
y1:array[1..4]of longint=(1,0,-1,0);
var
n,i,j,l,r,x,y,x2,y2,xx,yy:longint;
t:char;
a:array[0..1001,0..1001]of longint;
v:array[0..1001,0..1001]of boolean;
q:array[0..1000001,1..2]of longint;
f:boolean;
begin
readln(n);
fillchar(v,sizeof(v),true);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(t);
if t='1' then v[i,j]:=false;
end;
readln;
end;
readln(x,y);
v[x,y]:=false;
a[x,y]:=0;
readln(x2,y2);
l:=1;
r:=1;
q[1,1]:=x;
q[1,2]:=y;
f:=false;
for i:=0 to n+1 do
begin
v[i,0]:=false;
v[i,n+1]:=false;
v[0,i]:=false;
v[n+1,i]:=false;
end;
repeat
xx:=q[l,1];
yy:=q[l,2];
for i:=1 to 4 do
begin
if v[xx+x1[i],yy+y1[i]] then begin
if (xx+x1[i]=x2)and(yy+y1[i]=y2) then begin
f:=true;
break;
end
else begin
inc(r);
q[r,1]:=xx+x1[i];
q[r,2]:=yy+y1[i];
v[xx+x1[i],yy+y1[i]]:=false;
a[xx+x1[i],yy+y1[i]]:=a[xx,yy]+1;
end;
end;
end;
inc(l);
until f ;
writeln(a[xx,yy]+1);
end.