#include <bits/stdc++.h>
using namespace std;
int xd[4]={1,-1,0,0},yd[4]={0,0,1,-1};
int dy[4]={1,0,3,2};
int f[42][42][4][4];
int ff[42][42][4];
int a[42][42];
int n,m,qk;
int h,e;
struct node
{
int x,y,d;
}q[1000];
bool fy[42][42];
bool ch(int x,int y)
{
return x>0&&y>0&&x<=n&&y<=m&&a[x][y];
}
int bfs(int sx,int sy,int ex,int ey)
{
memset(fy,false,sizeof(fy));
h=0;
e=-1;
q[++e]={sx,sy,0};
fy[sx][sy]=true;
while(h<=e)
{
node u=q[h++];
for(int i=0;i<4;i++)
{
int lx=u.x+xd[i],ly=u.y+yd[i];
if(!ch(lx,ly)||fy[lx][ly])continue;
if(lx==ex&&ly==ey)return u.d+1;
q[++e]={lx,ly,u.d+1};
fy[lx][ly]=true;
}
}
return 0x3f3f3f3f;
}
struct nod
{
int x,y,e,d;
friend bool operator < (nod a,nod b)
{
return a.d>b.d;
}
};
priority_queue<nod>qp;
bool ft[42][42][4];
int dij(int sx,int sy,int ex,int ey)
{
while(!qp.empty())qp.pop();
memset(ft,false,sizeof(ft));
for(int i=0;i<4;i++)qp.push({sx,sy,i,ff[sx][sy][i]});
while(!qp.empty())
{
nod u=qp.top();
//cout<<u.x<<" "<<u.y<<" "<<u.e<<" "<<u.d<<"|\n";
qp.pop();
if(u.x==ex&&u.y==ey)return u.d;
if(ft[u.x][u.y][u.e])continue;
ft[u.x][u.y][u.e]=true;
int lx=u.x+xd[u.e],ly=u.y+yd[u.e];
int e=dy[u.e];
if(!ch(lx,ly))continue;
for(int i=0;i<4;i++)
{
if(f[lx][ly][e][i]==0x3f3f3f3f)continue;
int w=u.d+1+f[lx][ly][e][i];
if(w<ff[lx][ly][i])
{
ff[lx][ly][i]=w;
qp.push({lx,ly,i,w});
}
}
}
return -1;
}
int main()
{
cin>>n>>m>>qk;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
}
}
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(!ch(i,j))continue;
a[i][j]=0;
for(int ii=0;ii<4;ii++)
{
f[i][j][ii][ii]=0;
for(int jj=0;jj<4;jj++)
{
if(ii==jj)continue;
int sx=i+xd[ii],sy=j+yd[ii];
int ex=i+xd[jj],ey=j+yd[jj];
if(!ch(sx,sy)||!ch(ex,ey))continue;
f[i][j][ii][jj]=bfs(sx,sy,ex,ey);
//printf("i:%d j:%d ii:%d jj:%d by:%d\n",i,j,ii,jj,f[i][j][ii][jj]);
}
}
a[i][j]=1;
}
}
while(qk--)
{
int ex,ey,sx,sy,tx,ty;
scanf("%d%d%d%d%d%d",&ex,&ey,&sx,&sy,&tx,&ty);
if(!ch(ex,ey)||!ch(sx,sy)||!ch(tx,ty))
{
cout<<-1<<endl;
continue;
}
if(sx==tx&&sy==ty)
{
cout<<0<<endl;
continue;
}
memset(ff,0x3f,sizeof(ff));
a[sx][sy]=0;
for(int i=0;i<4;i++)
{
int lx=sx+xd[i],ly=sy+yd[i];
if(!ch(lx,ly))continue;
ff[sx][sy][i]=bfs(ex,ey,lx,ly);
//cout<<i<<"|"<<ff[sx][sy][i]<<" ";
}
a[sx][sy]=1;
printf("%d\n",dij(sx,sy,tx,ty));
}
return 0;
}