{
TASK:y1984
LANG:PASCAL
}
{$R-}
const
 max=10; {1024}
var
 t:text;
 g,i,j,k,l,n,m:longint;
 a,fr,en:array [0..max,0..max] of integer;
 gr,ce,cf:array [0..max] of integer;
 u:array [0..max] of boolean;

 function dfs(k:integer):boolean;
  var
   i:integer;
   fl,f:boolean;
  begin
    fl:=false;
    for i:=1 to cf[k] do
     if gr[fr[k,i]]=0 then
      begin
        fl:=true;
        gr[fr[k,i]]:=gr[k];
        f:=dfs(fr[k,i]);
      end;
    dfs:=fl;
  end;

 procedure yey;
  var
   i:integer;
  begin
    for i:=0 to n-1 do
     if gr[i]=0 then
      begin
        fillchar(u,sizeof(u),false);
        inc(g); gr[i]:=g;
        if not dfs(i) then gr[i]:=0;
      end;
  end;

begin
{  assign (t,'y1984.in');
  reset (t);}
  readln ({t,}n,m);
  for i:=0 to n-1 do
   for j:=0 to n-1 do a[i,j]:=2;
  for i:=1 to m do
   begin
     readln ({t,}j,k,l);
     a[j,k]:=l; a[k,j]:=l;
     if l=0 then begin
     inc(cf[j]); fr[j,cf[j]]:=k;
     inc(cf[k]); fr[k,cf[k]]:=j; end;
     if l=1 then begin
     inc(ce[j]); en[j,ce[j]]:=k;
     inc(ce[k]); en[k,ce[k]]:=j; end;
   end;


  yey;

  for i:=0 to n-2 do
   for j:=i+1 to n-1 do
    if (gr[i]<>0)and(gr[i]=gr[j]) then
     begin
       a[i,j]:=0; a[j,i]:=0;
       for k:=1 to ce[i] do
        if a[j,en[i,k]]=2 then
         begin
           a[j,en[i,k]]:=1;
           a[en[i,k],j]:=1;
           inc(ce[j]);
           en[j,ce[j]]:=en[i,k];
         end;
       for k:=1 to ce[j] do
        if a[i,en[j,k]]=2 then
         begin
           a[i,en[j,k]]:=1;
           a[en[j,k],i]:=1;
           inc(ce[i]);
           en[i,ce[i]]:=en[j,k];
         end;
     end;

  for i:=0 to n-2 do
   for j:=i+1 to n-1 do
    if a[i,j]=2 then
     for k:=1 to ce[i] do
      for l:=1 to ce[j] do
       if gr[en[i,k]]=gr[en[j,l]] then
        begin
          a[i,j]:=0;
          a[j,i]:=0;
          break;
        end;

  readln ({t,}l);
  for i:=1 to l do
   begin
     readln ({t,}j,k);
     writeln (a[j,k]);
   end;

{  close (t);}
end.