type data=record
x:integer;
y:integer;
s:longint;
end;
const dx:array[1..4] of -1..1=(1,-1,0,0);
dy:array[1..4] of -1..1=(0,0,-1,1);
var n,i,j,x1,x2,y1,y2:integer;
first,last:longint;
s1:ansistring;
a:array[1..2000,1..2000] of 0..1;
dl:array[1..10000001] of data;
t:boolean;
begin
readln(n);
for i:=1 to n do begin
read(s1);
for j:=1 to n do a[i,j]:=ord(s1[j])-ord('0');
readln;
end;
readln(x1,y1); readln(x2,y2);
dl[1].x:=x1; dl[1].y:=y1; first:=1; last:=1; t:=false; dl[1].s:=0;
repeat
for i:=1 to 4 do
if (dl[first].x+dx[i]>0) and (dl[first].y+dy[i]>0) and
(dl[first].x+dx[i]<=n) and (dl[first].y+dy[i]<=n) then
if (a[dl[first].x+dx[i],dl[first].y+dy[i]]=0) then
begin last:=last+1; dl[last].x:=dl[first].x+dx[i]; dl[last].y:=dl[first].y+dy[i];
dl[last].s:=dl[first].s+1; end;
if (dl[first].x=x2) and (dl[first].y=y2) then t:=true else begin a[dl[first].x+dx[i],dl[first].y+dy[i]]:=1; first:=first+1; end;
until t;
if t then writeln(dl[first].s);
end.