/*
TASK:Y1984
LANG:C++
*/
//#include<stdio.h>
#include<iostream>
using namespace std;

int n,m,q,tmp1,tmp2;
int a[10][10];
int used[10],queue[10],d[10];
int aq[10][2];
char t;

void init(){
  int i;
  cin>>n;
  cin>>m;
  //cin>>n>>m;//scanf("%d %d",&n,&m);
  cout<<n<<m;//printf("%d %d",n,m);
  cout<<n<<" m="<<m<<endl;
  for(i=1;i<=m;i++){
   cin>>tmp1>>tmp2>>t;//scanf("%d %d %c",&tmp1,&tmp2,&t);
   if(t==0){cout<<"asd";a[tmp1][tmp2]=1;a[tmp2][tmp1]=1;}
   else {a[tmp1][tmp2]=-1;a[tmp2][tmp1]=-1;}
  }
  cin>>q;//scanf("%d",&q);
  for(i=1;i<=q;i++)cin>>aq[i][1]>>aq[i][2];//scanf("%d %d",&aq[i][1],&aq[i][2]);
}

/*void solve(int l,int r){

  used[l]=1;queue[0]=0;
  queue[++queue[0]]=l;
  int temp=1,i;

  for(i=0;i<n;i++)d[i]=a[l][i];

  while(temp!=queue[0]+1){
    for(i=0;i<n;i++)
      if(a[queue[temp]][i]!=0 && !used[i]){
        queue[++queue[0]]=i;
        if(a[queue[temp]][i]==-1)d[i]=-d[queue[temp]];
        if(a[queue[temp]][i]==1)d[i]=d[queue[temp]];
        if(i==r)break;
      }
    temp++;
  }
}
*/
int main(){
 init();
 //solve(aq[1][1],aq[1][2]);
int i,j;
for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<*(*(a+i)+j)<<" ";/*printf("%d ",a[i][j])*/cout<<endl;}//printf("\n");}
for(i=0;i<n;i++)cout<<aq[i][1]<<" "<<aq[i][2]<<endl;//printf("%d %d\n",aq[i][1],aq[i][2]);

return 0;
}

