#include<bits/stdc++.h>
using namespace std;

vector<int> v1[10010],v2[10010];
bool used[10010];
int cmp[10010]={};

stack<int> st;

void dfs(int num){
  used[num] = true;
  for(int i=0;i<v1[num].size();i++){
    if(!used[ v1[num][i] ]) dfs(v1[num][i]);
  }
  st.push(num);
}

void rdfs(int num,int k){
  used[num] = true;
  cmp[num] = k;
  for(int i=0;i<v2[num].size();i++){
    if(!used[ v2[num][i] ]) rdfs(v2[num][i],k);
  }
}

int main(){
  
  int n,m,s,t;
  cin >> n >> m;
  for(int i=0;i<m;i++){
    cin >> s >> t;
    v1[s].push_back(t);
    v2[t].push_back(s);
  }
  
  memset(used,0,sizeof(used));
  for(int i=0;i<n;i++){
    if(!used[i]) dfs(i);
  }

  int k=0,top;
  memset(used,0,sizeof(used));
  while(!st.empty()){
    top = st.top();
    st.pop();
    if(!used[top]){
      rdfs(top,k);
      k++;
    }
  }
  
  int q,a,b;
  cin >> q;
  for(int i=0;i<q;i++){
    cin >> a >> b;
    cout << (cmp[a]==cmp[b]?1:0) << endl;
  }
  
  return(0);
}

