#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll INF = 1e9;
const int N = 1e4+10;

vector<int>dir[N],v[N],con[N];
bool visited[N],rec[N],vis[N];
int sz,sum[N],a[N];


void dfs2(int s){
    vis[s]=true;
    int sol=-INF;
    for(int i=0;i<dir[s].size();i++){
        if(!vis[dir[s][i]])dfs2(dir[s][i]);
        sol=max(sol,sum[dir[s][i]]+1);
    }
    sum[s]=sol;
}

void dfs(int s){
    con[sz].push_back(s);
    vis[s]=true;
    for(int i=0;i<v[s].size();i++){
        if(!vis[v[s][i]])dfs(v[s][i]);
    }
}

bool ccc(int k){
    if(!visited[k]){
        visited[k]=true;
        rec[k]=true;
        for(int i=0;i<(int)dir[k].size();i++){
            int p=dir[k][i];
            if(!visited[p]&&ccc(p))return true;
            else if(rec[p])return true;
        }
    }
    rec[k]=false;
    return false;
}

bool cycle(){
    for(int i=0;i<N;i++){
        if(ccc(i))return true;
    }
    return false;
}

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        int n,m,l,r,z;
        memset(vis,false,sizeof(vis));
        memset(visited,false,sizeof(visited));
        memset(rec,false,sizeof(rec));
        for(int i=0;i<N;i++){
            v[i].clear();
            dir[i].clear();
            con[i].clear();
        }
        for(int i=0;i<N;i++)sum[i]=-INF;
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            cin>>l>>r>>z;
            if(z==1)dir[r].push_back(l-1);
            else dir[l-1].push_back(r);
            v[l-1].push_back(r);
            v[r].push_back(l-1);
        }
        if(cycle()){
            cout<<-1<<"\n";
            continue;
        }
        sz=0;
        for(int i=0;i<N;i++){
            if(!vis[i]){
                sz++;
                dfs(i);
            }
        }
        sum[0]=0;
        for(int i=1;i<=sz;i++){

            for(int j=0;j<con[i].size();j++){
                int p=con[i][j];
                if(!dir[p].size()){
                    sum[p]=0;
                }
            }
            for(int j=0;j<con[i].size();j++){
                int p=con[i][j];
                if(dir[p].size()){
                    dfs2(p);
                }
            }
        }
        for(int i=1;i<=n;i++)a[i]=sum[i]-sum[i-1];
        cout<<1<<"\n";
        for(int i=1;i<=n;i++)cout<<a[i]<<" ";
        cout<<"\n";
    }



    return 0;
}
/*

1
3 3
1 3 1
1 2 -1
2 3 -1

*/
