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
****************************************************************/