/*
TASK:Y1984
LANG:C++
*/
#include<stdio.h>

struct qw{int x,y;} ;
int M[1025][1025],m,n,q;
qw Q[101];
void vhod()
{int a,b,v;
 scanf("%d %d",&n,&m);
 for(int i=1;i<n;i++)
  for(int j=0;j<i;j++)
    M[i][j]=-1;
 for(int i=0;i<n;i++)M[i][i]=3;

 for(int i=0;i<m;i++)
  {scanf("%d %d %d",&a,&b,&v);
   M[a][b]=M[b][a]=v;
  }
 scanf("%d",&q);
 for(int i=0;i<q;i++)
  scanf("%d %d",&Q[i].x,&Q[i].y);
}
void find(int x,int y)
{ int a=0;
 while(M[x][y]==-1)
    { if(M[x][a]!=-1&&M[a][y]!=-1)
          if(M[x][a]!=3&&M[a][y]!=3)
          if(M[x][a]!=M[a][y])M[x][y]=M[y][x]=1;
              else M[x][y]=M[y][x]=0;
      a++;
     if(a==n)break;
   }
}
void losung()
{
for(int i=1;i<n;i++)
  for(int j=0;j<i;j++)
   if(M[i][j]==-1)find(i,j);
}
void print()
{
 for(int u=0;u<q;u++)
    if(M[Q[u].x][Q[u].y]==-1)printf("2\n");
       else if(Q[u].x<Q[u].y)printf("%d\n",M[Q[u].x][Q[u].y]);
           else printf("%d\n",M[Q[u].y][Q[u].x]);
}
int main()
{vhod();
 losung();
 print();
 return 0;
}
