/*
TASK: y1984
LANG: C
*/

#include <stdio.h>
#include <stdlib.h>
#define MAX 1337
FILE *in; FILE *out;
int a[MAX][3];
int ma3x[MAX];

int sort(const void *a, const void *b)
{
int *aa, *bb;

aa = (int *) a;
bb = (int *) b;

return (*aa - *bb);
}

void dowork(int n)
{
int i, c, ans;


if (a[0][2] == 0)
	{
	ma3x[a[0][0]] = 1;
	ma3x[a[0][1]] = 1;
	}
else
	{
	ma3x[a[0][0]] = 1;
	ma3x[a[0][1]] = 2;
	}

for (i=0; i<n; i++)
for (c=0; c<n; c++)
	{
	if ((ma3x[a[c][0]] != 0) && (ma3x[a[c][1]] == 0))
		{
		if (a[c][2] == 0)
		   ma3x[a[c][1]] = ma3x[a[c][0]];
		else
		   ma3x[a[c][1]] = ma3x[a[c][0]] % 2 + 1;
		}
	if ((ma3x[a[c][0]] == 0) && (ma3x[a[c][1]] != 0))
		{
		if (a[c][2] == 0)
		   ma3x[a[c][0]] = ma3x[a[c][1]];
		else
		   ma3x[a[c][0]] = ma3x[a[c][1]] % 2 + 1;
		}
	}

return;
}

int findans(int x, int y)
{
if (ma3x[x] == 0 || ma3x[y] == 0) return 2;
if (ma3x[x] != ma3x[y]) return 1;
if (ma3x[x] == ma3x[y]) return 0;
return 42;
}


int main(void)
{
int i, c, n, m, k;
int ans;
int x, y;

for (i=0; i<MAX; i++) for (c=0; c<3; c++) a[i][c]=0;
for (i=0; i<MAX; i++) ma3x[i]=0;

//in = fopen("y1984.in", "rt"); out = fopen("y1984.out", "wt");
in = stdin; out = stdout;
fscanf(in, "%d", &n);
fscanf(in, "%d", &m);
for (i=0; i<m; i++) fscanf(in, "%d %d %d", &a[i][0], &a[i][1], &a[i][2]);
dowork(n);
fscanf(in, "%d", &k);
for (i=0; i<k; i++)
	{
	fscanf(in, "%d %d", &x, &y);
	ans = findans(x, y);
	fprintf(out, "%d\n", ans);
	}

fclose(in); fclose(out);

return 0;
}
