#include<bits/stdc++.h>
using namespace std;
const int N = 18;
const int M = 300;
int a[M],b[M],c[M],minn[N],maxn[N];
bool vis[N];
vector<pair<int,int> > v[N];
int n,m;
int rnk[N],ans[N];
void dfs(int now){
if(now == n+1){
for(int i=1;i<=n;i++){
if(ans[i] == 0){
ans[i] = rnk[i];
}else if(rnk[i] != ans[i]){
ans[i] = -1;
}
}
return;
}
for(int i=minn[now];i<=maxn[now];i++){
if(!vis[i]){
bool flag = false;
for(int j=0;j<v[now].size();j++){
int u = v[now][j].first;
int w = v[now][j].second;
if(rnk[u] != 0 && rnk[u]-i != w){
flag = true;
}
}
if(flag){
continue;
}
rnk[now] = i;
vis[i] = true;
dfs(now + 1);
vis[i] = false;
rnk[now] = 0;
}
}
}
int main(){
scanf("%d%d",&n,&m);
if(m*2+3 < n){
for(int i=1;i<=n;i++){
printf("-1 ");
}
exit(0);
}
for(int i=1;i<=n;i++){
minn[i] = 1;
maxn[i] = n;
}
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
minn[a[i]] = max(minn[a[i]],c[i]+1);
maxn[b[i]] = min(maxn[b[i]],n-c[i]);
v[a[i]].push_back(make_pair(b[i],-c[i]));
v[b[i]].push_back(make_pair(a[i],c[i]));
}
dfs(1);
for(int i=1;i<=n;i++){
printf("%d ",ans[i]?ans[i]:-1);
}
}