program ss;
const dx:array[1..4]of -1..1=(0,1,-1,0);
dy:array[1..4]of -1..1=(1,0,0,-1);
type edgenode=^edge;
edge=record
dir,w:longint;
next:edgenode;
end;
var v1,map:array[0..31,0..31]of boolean;
a:array[1..30,1..30,1..4]of edgenode;
d1:array[1..30,1..30]of longint;
d2:array[1..30,1..30,1..4]of longint;
q1:array[1..10000,1..2]of integer;
q2:array[1..100000,1..3]of longint;
v2:array[1..30,1..30,1..4]of boolean;
ans,f,r,ex,ey,sx,sy,tx,ty,n,m,q,i,j,k,l:longint;
c:edgenode;
procedure bfs(s1,s2,t1,t2:integer);
var r,f,i,p,q:longint;
begin
fillchar(d1,sizeof(d1),255);
fillchar(v1,sizeof(v1),0);
fillchar(q1,sizeof(q1),0);
f:=0; r:=1; q1[1,1]:=s1; q1[1,2]:=s2; d1[s1,s2]:=0; v1[s1,s2]:=true;
while f<r do
begin
inc(f); p:=q1[f,1]; q:=q1[f,2];
for i:=1 to 4 do
if (map[p+dx[i],q+dy[i]])and(d1[p+dx[i],q+dy[i]]=-1)
then
begin
d1[p+dx[i],q+dy[i]]:=d1[p,q]+1;
if (p+dx[i]=t1)and(q+dy[i]=t2) then exit;
if not v1[p+dx[i],q+dy[i]]
then
begin
inc(r); q1[r,1]:=p+dx[i]; q1[r,2]:=q+dy[i]; v1[p+dx[i],q+dy[i]]:=true;
end;
end;
v1[p,q]:=false;
end;
end;
begin
readln(n,m,q);
for i:=1 to n do
for j:=1 to m do
begin
read(k);
if k=1 then map[i,j]:=true;
end;
for i:=1 to n do
for j:=1 to m do
if map[i,j]
then
for k:=1 to 4 do
if map[i+dx[k],j+dy[k]]
then
begin
map[i,j]:=false;
for l:=1 to 4 do
if (k<>l)and(map[i+dx[l],j+dy[l]])
then
begin
bfs(i+dx[k],j+dy[k],i+dx[l],j+dy[l]);
if d1[i+dx[l],j+dy[l]]<>-1
then
begin
new(c); c^.dir:=l; c^.w:=d1[i+dx[l],j+dy[l]]; c^.next:=a[i,j,k]; a[i,j,k]:=c;
end;
end;
map[i,j]:=true;
end;
for i:=1 to q do
begin
fillchar(q2,sizeof(q2),0);
fillchar(d2,sizeof(d2),255);
fillchar(v2,sizeof(v2),0); f:=0; r:=0;
readln(ex,ey,sx,sy,tx,ty);
if ((ex=sx)and(ey=sy))or((ex=0)or(ey=0))
then begin writeln(-1); continue; end;
if(sx=tx)and(sy=ty)
then begin writeln(0); continue; end;
map[sx,sy]:=false;
for j:=1 to 4 do
if map[sx+dx[j],sy+dy[j]]
then
begin
bfs(ex,ey,sx+dx[j],sy+dy[j]);
if d1[sx+dx[j],sy+dy[j]]<>-1
then
begin
inc(r);
q2[r,1]:=sx; q2[r,2]:=sy; q2[r,3]:=j;
d2[sx,sy,j]:=d1[sx+dx[j],sy+dy[j]];
v2[sx,sy,j]:=true;
end;
end;
map[sx,sy]:=true;
while f<r do
begin
inc(f);
c:=a[q2[f,1],q2[f,2],q2[f,3]];
while c<>nil do
begin
if (d2[q2[f,1],q2[f,2],c^.dir]=-1)
or(d2[q2[f,1],q2[f,2],c^.dir]>d2[q2[f,1],q2[f,2],q2[f,3]]+c^.w)
then
begin
d2[q2[f,1],q2[f,2],c^.dir]:=d2[q2[f,1],q2[f,2],q2[f,3]]+c^.w;
if not v2[q2[f,1],q2[f,2],c^.dir]
then
begin
inc(r); q2[r,1]:=q2[f,1]; q2[r,2]:=q2[f,2]; q2[r,3]:=c^.dir;
v2[q2[f,1],q2[f,2],c^.dir]:=true;
end;
end;
c:=c^.next;
end;
if (d2[q2[f,1]+dx[q2[f,3]],q2[f,2]+dy[q2[f,3]],5-q2[f,3]]=-1)
or(d2[q2[f,1]+dx[q2[f,3]],q2[f,2]+dy[q2[f,3]],5-q2[f,3]]>d2[q2[f,1],q2[f,2],q2[f,3]]+1)
then
begin
d2[q2[f,1]+dx[q2[f,3]],q2[f,2]+dy[q2[f,3]],5-q2[f,3]]:=d2[q2[f,1],q2[f,2],q2[f,3]]+1;
if not v2[q2[f,1]+dx[q2[f,3]],q2[f,2]+dy[q2[f,3]],5-q2[f,3]]
then
begin
inc(r); q2[r,1]:=q2[f,1]+dx[q2[f,3]]; q2[r,2]:=q2[f,2]+dy[q2[f,3]];q2[r,3]:=5-q2[f,3];
v2[q2[f,1]+dx[q2[f,3]],q2[f,2]+dy[q2[f,3]],5-q2[f,3]]:=true;
end;
end;
v2[q2[f,1],q2[f,2],q2[f,3]]:=false;
end;
ans:=maxlongint;
for j:=1 to 4 do
if (d2[tx,ty,j]<>-1)and(d2[tx,ty,j]<ans)
then ans:=d2[tx,ty,j];
if ans=maxlongint
then writeln(-1) else writeln(ans);
end;
end.
/**************************************************************
Problem: 2329
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/