/*
TASK: y1984
LANG: C++
ID: smg_b3
*/

#include <iostream>
#include <vector>

 using namespace std;

 struct node {
        vector<int> ne;
        vector<int> v;
 };

 vector<node> T;
 vector<bool> used;
 vector<int> tmp;
 int n, m, q;

 void ask(int t) {
      used[t] = true;
      for(int i = 0; i < T[t].ne.size(); ++i) {
              if( T[t].v[i] == 0 ) {
                  if( tmp[t] == 0 ) tmp[T[t].ne[i]] = 0;
                  else tmp[T[t].ne[i]] = 1;
              }
              if( T[t].v[i] == 1 ) {
                  if( tmp[t] == 0 ) tmp[T[t].ne[i]] = 1;
                  else tmp[T[t].ne[i]] = 0;
              }
              if( !used[T[t].ne[i]] )
                  ask(T[t].ne[i]);
      }
 }

 int main() {
     cin >> n >> m;
     used.resize(n); tmp.resize(n);
     for(int i = 0; i < m; ++i) {
             int k1, k2, k3;
             cin >> k1 >> k2 >> k3;
             T[k1].ne.push_back(k2); T[k2].ne.push_back(k1);
             T[k1].v.push_back(k3); T[k2].v.push_back(k3);
     }
     cin >> q;
     for(int i = 0; i < q; ++i) {
             int k1, k2;
             cin >> k1 >> k2;
             for(int i = 0; i < n; ++i) { used[i] = 0; tmp[i] = -1; }
             tmp[k1] = 0;
             ask(k1);
             if( used[k2] == 0 ) cout << "2\n";
             else cout << tmp[k2] << '\n';
     }
     return 0;
 }
