//https://www.luogu.com.cn/problem/P5960
#include <bits/stdc++.h>
using namespace std;
const int N=5e3+10,M=2*N;
int head[N],Next[M],to[M],weight[M],cnt;
int dist[N],update[N];
int q[N];
bool enter[N];
int h,t;
int n,m;
void prepare(){
h=t=0;
cnt=1;
memset(head,0,sizeof head);
memset(dist,0x3f,sizeof dist);
memset(update,0,sizeof update);
memset(enter,false,sizeof enter);
}
void addEdge(int u,int v,int w){
Next[cnt]=head[u];
to[cnt]=v;
weight[cnt]=w;
head[u]=cnt++;
}
bool spfa(int s){
dist[s]=0;
update[s]=1;
q[t]=s;
t=(t+1)%N;
enter[s]=true;
while(h!=t){
int u=q[h];
h=(h+1)%N;
enter[u]=false;
for(int ei=head[u];ei;ei=Next[ei]){
int v=to[ei],w=weight[ei];
if(dist[v]>dist[u]+w){
dist[v]=dist[u]+w;
if(!enter[v]){
if(++update[v]>n) return true;
q[t]=v;
t=(t+1)%N;
enter[v]=true;
}
}
}
}
return false;
}
int main(){
scanf("%d%d",&n,&m);
prepare();
for(int i=1;i<=n;i++) addEdge(0,i,0);
for(int i=1,u,v,w;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
addEdge(v,u,w);
}
if(spfa(0)) puts("NO");
else{
for(int i=1;i<=n;i++) printf("%d ",dist[i]);
}
return 0;
}