{
TASK:wappo
LANG:pascal
}
var n,x,y,x1,y1,x2,y2,t:longint;
    m,mm,i,j:longint;
    s:text;
    a,b:array[0..7,0..7] of longint;
    c,d:array[0..100] of longint;
function min(a,b:longint):longint;
begin
min:=(a+b-abs(a-b)) div 2;
end;
function monst(var n,x,y,x1,y1:longint):boolean;
var i:longint;
    f:boolean;
begin
for i:=1 to 3 do
    begin
    f:=true;
    if x=x1 then f:=false else if x<x1 then
       begin
       if a[x1,y1] mod 2=0 then x1:=x1-1 else f:=false;
       end else if a[x1,y1] div 2 mod 2=0 then x1:=x1+1 else f:=false;
    if (not f) and (y<>y1) then if y>y1 then
       begin
       if a[x1,y1] div 8=0 then y1:=y1+1;
       end else if a[x1,y1] div 4 mod 2=0 then y1:=y1-1;
    if (x=x1) and (y=y1) then
       begin
       monst:=true;
       exit;
       end;
    end;
monst:=false;
end;
function monst2(var n,x,y,x1,y1,x2,y2,d1,d2:longint):boolean;
var k,i,j:longint;
    f:boolean;
begin
for k:=1 to 2 do
begin
f:=true;
i:=x1;
j:=y1;
if d1=0 then
begin
if x=x1 then f:=false else if x<x1 then
   begin
   if a[x1,y1] mod 2=0 then x1:=x1-1 else f:=false;
   end else if a[x1,y1] div 2 mod 2=0 then x1:=x1+1 else f:=false;
if (not f) and (y<>y1) then if y<y1 then
   begin
   if a[x1,y1] div 8=0 then y1:=y1+1;
   end else if a[x1,y1] div 4 mod 2=0 then y1:=y1-1;
if (x=x1) and (y=y1) then
   begin
   monst2:=true;
   exit;
   end;
if (b[x1,y1]=1) and ((x1<>i) or (y1<>j)) then d1:=4;
end;
f:=true;
i:=x2;
j:=y2;
if d2=0 then
begin
if x=x2 then f:=false else if x<x2 then
   begin
   if a[x2,y2] mod 2=0 then x2:=x2-1 else f:=false;
   end else if a[x2,y2] div 2 mod 2=0 then x2:=x2+1 else f:=false;
if (not f) and (y<>y2) then if y<y2 then
   begin
   if a[x2,y2] div 8=0 then y2:=y2+1;
   end else if a[x2,y2] div 4 mod 2=0 then y2:=y2-1;
if (x=x2) and (y=y2) then
   begin
   monst2:=true;
   exit;
   end;
if (b[x2,y2]=1) and ((x2<>i) or (y2<>j)) then d2:=4;
end;
if (x1=x2) and (y1=y2) then
   begin
   monst2:=false;
   x2:=0;
   y2:=0;
   exit;
   end;
end;
monst2:=false;
end;
procedure find(n,x,y,x1,y1,x2,y2,lev,d1,d2:longint);
begin
if lev>=mm then exit;
if (x<1) or (y<1) or (x>n) or (y>n) then
   begin
   mm:=lev;
   for mm:=1 to mm do d[mm]:=c[mm];
   exit;
   end;
if b[x,y]=1 then exit;
if x2=0 then
   begin
   if monst(n,x,y,x1,y1) then exit;
   end else if monst2(n,x,y,x1,y1,x2,y2,d1,d2) then exit;
if d1>0 then dec(d1);
if d2>0 then dec(d2);
if (a[x,y] mod 2=0) and (c[lev]<>3) then
   begin
   c[lev+1]:=2;
   find(n,x,y-1,x1,y1,x2,y2,lev+1,d1,d2);
   end;
if (a[x,y] div 2 mod 2=0) and (c[lev]<>2) then
   begin
   c[lev+1]:=3;
   find(n,x,y+1,x1,y1,x2,y2,lev+1,d1,d2);
   end;
if (a[x,y] div 4 mod 2=0) and (c[lev]<>1) then
   begin
   c[lev+1]:=0;
   find(n,x-1,y,x1,y1,x2,y2,lev+1,d1,d2);
   end;
if (a[x,y] div 8=0) and (c[lev]<>0) then
   begin
   c[lev+1]:=1;
   find(n,x+1,y,x1,y1,x2,y2,lev+1,d1,d2);
   end;
end;
begin
assign(s,'');
reset(s);
readln(s,n,x,y,x1,y1,x2,y2,t);
for t:=1 to t do
    begin
    readln(s,i,j);
    b[i,j]:=1;
    end;
for i:=1 to n do for j:=1 to n do read(s,a[i,j]);
close(s);
mm:=20;
if a[x,y] div 2 mod 2=0 then
   begin
   c[1]:=3;
   find(n,x,y+1,x1,y1,x2,y2,1,0,0);
   end;
if a[x,y] mod 2=0 then
   begin
   c[1]:=2;
   find(n,x,y-1,x1,y1,x2,y2,1,0,0);
   end;
if a[x,y] div 4 mod 2=0 then
   begin
   c[1]:=0;
   find(n,x-1,y,x1,y1,x2,y2,1,0,0);
   end;
if a[x,y] div 8=0then
   begin
   c[1]:=1;
   find(n,x+1,y,x1,y1,x2,y2,1,0,0);
   end;
writeln(mm);
for mm:=1 to mm do writeln(d[mm]);
end.