#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e4+10;
const int inf=1e18;
int n,m,c;
int head[maxn],dis[maxn],cnt[maxn];
bool in[maxn];
struct node{
int v,nxt,w;
}e[maxn<<2];
inline void add(int u,int v,int w){
e[++c].w=w;
e[c].v=v;
e[c].nxt=head[u];
head[u]=c;
}
inline void ipt(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(v,u,w);
}
for(int i=1;i<=n;i++)add(0,i,0);
}
inline bool spfa( int s ){
for ( int i = 0; i <= n; i++ )
dis[i] = inf;
queue<int> q;
dis[s]=0;
in[s]= true;
cnt[s]++;
q.push( s );
while (!q.empty())
{
int u = q.front(); q.pop();
in[u] = false;
for ( int j = head[u]; j; j =e[j].nxt )
{
int v = e[j].v, w = e[j].w;
if ( dis[v] > dis[u] + w )
dis[v] = dis[u] + w;
if ( in[v] )
continue;
q.push( v );
in[v] = true;
cnt[v]++;
if ( cnt[v] > n+1 )return false;
}
}
return true;
}
signed main(){
ipt();
if(!spfa(0)){
printf("NO\n");
return 0;
}
for(int i=1;i<=n;i++)printf("%lld ",dis[i]);
return 0;
}