#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 33;
const int dx[] = {0,0,-1,1};
const int dy[] = {1,-1,0,0};
int n,m,q,a[N][N];
int dis[N][N];
vector<pair<int,int> > g[N*N*4];
int val(int x,int y){
return 1<=x && x<=n && 1<=y && y<=m && a[x][y]==1;
}
int nwd(int d){
if (d==0 || d==1){
return 1-d;
}
return 5-d;
}
void bfs(int i,int j,int xx,int yy){
a[xx][yy]=0;
memset(dis,-1,sizeof dis);
queue<pair<int,int> > q;
q.push({i,j});
dis[i][j]=0;
while (!q.empty()){
int x=q.front().first,y=q.front().second;
q.pop();
for (int d=0; d<4; d++){
int nx=x+dx[d],ny=y+dy[d];
if (val(nx,ny) && dis[nx][ny]==-1){
dis[nx][ny]=dis[x][y]+1;
q.push({nx,ny});
}
}
}
a[xx][yy]=1;
}
int id(int x,int y){
return (x-1)*m+y;
}
int enc(int x,int y,int d){
return 4*id(x,y)+d;
}
void add_edge(){
for (int i=1; i<=n; i++){
for (int j=1; j<=m; j++){
if (!val(i,j)){
continue;
}
for (int d=0; d<4; d++){
int kx=i+dx[d],ky=j+dy[d];
if (!val(kx,ky)){
continue;
}
bfs(kx,ky,i,j);
for (int nd=0; nd<4; nd++){
int nkx=i+dx[nd],nky=j+dy[nd];
if (val(nkx,nky) && dis[nkx][nky]>=1){
g[enc(i,j,d)].push_back({enc(i,j,nd),dis[nkx][nky]});
}
}
}
}
}
for (int i=1; i<=n; i++){
for (int j=1; j<=m; j++){
if (!val(i,j)){
continue;
}
for (int d=0; d<4; d++){
int ni=i+dx[d],nj=j+dy[d],nd=nwd(d);
if (val(ni,nj)){
g[enc(i,j,d)].push_back({enc(ni,nj,nd),1});
}
}
}
}
}
int d[N*N*4];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m>>q;
for (int i=1; i<=n; i++){
for (int j=1; j<=m; j++){
cin>>a[i][j];
}
}
add_edge();
while (q--){
int ex,ey,sx,sy,tx,ty;
cin>>ex>>ey>>sx>>sy>>tx>>ty;
if (sx==tx && sy==ty){
cout<<0<<"\n";
continue;
}
bfs(ex,ey,sx,sy);
memset(d,-1,sizeof d);
vector<pair<int,int> > v;
for (int i=0; i<4; i++){
if (val(sx+dx[i],sy+dy[i])){
int di;
d[enc(sx,sy,i)]=(di=dis[sx+dx[i]][sy+dy[i]]);
if (~di) v.push_back({di,enc(sx,sy,i)});
}
}
sort(v.begin(),v.end());
priority_queue<pair<int,int> > q;
for (auto u : v){
q.push({-u.first,u.second});
}
while (!q.empty()){
auto x=q.top().second,di=-q.top().first;
q.pop();
if (d[x]!=di){
continue;
}
for (auto p : g[x]){
int y=p.first,w=p.second;
if (d[y]==-1){
d[y]=d[x]+w;
q.push({-d[y],y});
}
}
}
int ans=2e9;
for (int i=0; i<4; i++){
if (val(tx+dx[i],ey+dy[i]) && d[enc(tx,ty,i)]!=-1){
ans=min(ans,d[enc(tx,ty,i)]);
}
}
if (ans==2e9){
ans=-1;
}
cout<<ans<<"\n";
}
return 0;
}