#include<bits/stdc++.h>
#define int long long
using namespace std;
const int dx[4]={-1,0,1,0};
const int dy[4]={0,1,0,-1};
int n,m,k,t,a[100010][100010];
struct node
{
int px;
int py;
int s;
};
bool vis[100010][100010];
void bfs()
{
int sx,sy,ex,ey;
cin>>sx>>sy>>ex>>ey;
memset(vis,0,sizeof(vis));
vis[sx][sy]=1;
queue<node>q;
q.push({sx,sy,0});
while(!q.empty())
{
node k=q.front();
q.pop();
if(k.px==ex&&k.py==ey)
{
cout<<k.s<<"\n";
return;
}
for(int i=0;i<4;i++)
{
int xx=k.px+dx[i];
int yy=k.py+dy[i];
int ss=k.s+1;
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&!vis[xx][yy])
{
if(i==1||i==3)
{
q.push({xx,yy,ss});
vis[xx][yy]=1;
}
else if(a[k.px][k.py]&&a[xx][yy])
{
q.push({xx,yy,ss});
vis[xx][yy]=1;
}
}
}
}
cout<<-1<<"\n";
return;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>k;
for(int i=1;i<=k;i++)
{
int x,u,v;
cin>>x>>u>>v;
for(int j=u;j<=v;j++)
{
a[x][j]=1;
}
}
cin>>t;
for(int i=1;i<=t;i++)
{
bfs();
}
return 0;
}
@jrzhr,@ lsd110504lsd,@Paper27