#include<bits/stdc++.h>
using namespace std;
const int M=1e4+10;
vector<int>g[M],rg[M],st;
int n,m,q,topol[M],c;
bool mark[M];
void dfs1(int v)
{
  mark[v]=true;
  for(auto u:g[v])
    if(!mark[u])
      dfs1(u);
  st.push_back(v);
}
void dfs2(int v,int t)
{
  topol[v]=t;
  for(auto u:rg[v])
    if(!topol[u])
      dfs2(u,t);
}
int main()
{
  cin>>n>>m;
  for(int i=0;i<m;i++)
    {
      int u,v;
      cin>>u>>v;
      u++;v++;
      g[u].push_back(v);
      rg[v].push_back(u);
    }
  for(int i=1;i<=n;i++)
    if(!mark[i])
      dfs1(i);
  for(int i=st.size()-1;i>=0;i--)
    if(!topol[st[i]])
      dfs2(st[i],++c);
  cin>>q;
  while(q--)
    {
      int u,v;cin>>u>>v;
      u++;v++;
      if(topol[v]==topol[u])
	cout<<1<<endl;
      else
	cout<<0<<endl;
    }
}