{$s-}
{TASK: Y1984
 LAN: PASCAL}
Program Y1984;
 Var A: Array[1..1024, 1..1024] of Byte;
     S, W, E: Array[1..1024] of Byte;
     Bl: Array[1..1024, 1..1024] of Boolean;
     I, J, N, Q, M, X, Y, R: Byte;
 Procedure Ins(Z: Integer);
  Var K: Integer;
  Begin
   For K := 1 to N do If (A[Z, K] <> 2) and not(Bl[Z, K])then
                       Begin
                        Bl[Z, K] := True;
                        Bl[K, Z] := True;
                        If A[Z, K] = 0 then S[K] := S[Z]
                                       else If S[Z] = 1 then S[K] := 2
                                                        else S[K] := 1;
                        Ins(K)
                       End;
  End;
 Begin
  ReadLn(N);
  ReadLn(Q);
  For I := 1 to N do
   For J := 1 to N do A[I, J] := 2;
  For I := 1 to Q do Begin
                      ReadLn(X, Y, R);
                      A[X + 1, Y + 1] := R;
                      A[Y + 1, X + 1] := R
                     End;
  ReadLn(M);
  For I := 1 to M do ReadLn(W[I] , E[I]);

  S[X + 1] := 1;
  Ins(X + 1);
  For I := 1 to M do
   Begin
    X := W[I] + 1;
    Y := E[I] + 1;
    If (S[X] = 0) or (S[Y] = 0) then WriteLn(2)
                                else If S[X] = S[Y] then WriteLn(0)
                                                    else WriteLn(1);
   End;
 End.
