var a,w:array[-1000..1000,-1000..1000] of longint;
p,q:array[-10000..1000000] of longint;
i,j,k,m,n,o,t,m1,m2,n1,n2,tb,wb:longint;kk:boolean;
st:array[0..1005,0..1005] of string;st1,st2:ansistring;ch:char;
begin
readln(n);
for i:=1 to n do begin k:=0;
repeat
inc(k);
read(ch);
st[i,k]:=ch+st[i,k];
val(st[i,k],a[i,k]);
w[i,k]:=1;
until k=n;
readln;end;
readln(m1,n1);
readln(m2,n2);
kk:=false;p[1]:=m1;q[1]:=n1;k:=0;tb:=1;wb:=1;w[m1,n1]:=2;
if (m1=m2) and (n1=n2) then write(0)
else begin
repeat
inc(k);t:=0;
for i:=tb to wb do
begin
if (a[p[i],q[i]-1]=0) and (w[p[i],q[i]-1]<>2) and (q[i]-1>0) then
begin
inc(t);p[wb+t]:=p[i];q[wb+t]:=q[i]-1;w[p[wb+t],q[wb+t]]:=2;if (p[wb+t]=m2)
and (q[wb+t]=n2) then kk:=true;end;
if (a[p[i],q[i]+1]=0) and (w[p[i],q[i]+1]<>2) and (q[i]+1<=n) then
begin
inc(t);p[wb+t]:=p[i];q[wb+t]:=q[i]+1;w[p[wb+t],q[wb+t]]:=2;if (p[wb+t]=m2)
and (q[wb+t]=n2) then kk:=true;end;
if (a[p[i]-1,q[i]]=0) and (w[p[i]-1,q[i]]<>2) and (p[i]-1>0) then
begin
inc(t);p[wb+t]:=p[i]-1;q[wb+t]:=q[i];w[p[wb+t],q[wb+t]]:=2;if (p[wb+t]=m2)
and (q[wb+t]=n2) then kk:=true;end;
if (a[p[i]+1,q[i]]=0) and (w[p[i]+1,q[i]]<>2) and (p[i]+1<=n) then
begin
inc(t);p[wb+t]:=p[i]+1;q[wb+t]:=q[i];w[p[wb+t],q[wb+t]]:=2;if (p[wb+t]=m2)
and (q[wb+t]=n2) then kk:=true;end;
tb:=wb+1;wb:=wb+t;end;
until kk=true;write(k);end;
end.