/*
PROB: Y1984
LANG: C++
*/

#include <stdio.h>

const int MAX_N = 1030;

int n, m;
int A[MAX_N][MAX_N]; //    1 -> priqteli
                     //   -1 -> vragove
int V[MAX_N];
int Q;

void input ()
{
   int i;
   int a, b, r;

   freopen ("Y1984.in", "r", stdin);

   scanf ("%d%d", &n, &m);

   for (i=0; i<m; i++) {
      scanf ("%d%d%d", &a, &b, &r);
      A[a][b] = A[b][a] = r?(-1):(1);
   }
}

void dfs (int a, int p)
{
   int i;

   V[a] = p;

   for (i=0; i<n; i++)
      if (!V[i] && A[a][i])
         dfs (i, A[a][i]*p);
}

void solve ()
{
   int i, cnt=1;

   for (i=0; i<n; i++)
      if (!V[i])
         dfs (i, cnt++);
}

void output ()
{
   int i;
   int a, b;

   scanf ("%d", &Q);

   for (i=0; i<Q; i++) {
      scanf ("%d%d", &a, &b);
      printf ("%d\n", (V[a]==V[b])?0:(V[a]==-V[b])?1:2);
   }
}

int main ()
{
   input ();
   solve ();
   output ();

   return 0;
}
