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

#include <iostream>
#include <vector>

 using namespace std;

 struct node {
//        int sz;
        vector<int> ne;
        vector<int> v;
//        int ne[1024];
//        int v[1024];
 };

// node T[1024];
// bool used[1024];
// int tmp[1024];
 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+16); tmp.resize(n+16);
     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);
//             T[k1].ne[T[k1].sz] = k2; T[k1].sz++; T[k2].ne[T[k2].sz] = k1;
//             T[k1].v[T[k1].sz] = k3; T[k2].v[T[k2].sz] = k3;
//             T[k1].sz++; T[k2].sz++;
     }
     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;
 }
