#include<bits/stdc++.h>
using namespace std;
const int M=5e5+5;
struct node{
int nxt,v,w;
}g[M];
int h[M],cnt1=0,vis[M],dis[M],cnt[M],n,m;
void add(int a,int b,int c)
{
g[++cnt1].nxt=h[a];
g[cnt1].v=b;
g[cnt1].w=c;
h[a]=cnt1;
}
int spfa()
{
memset(dis,-0x3f,sizeof dis);
queue<int>q;
q.push(0);
dis[0]=0;
vis[0]=1;
while (!q.empty())
{
int u=q.front();
vis[u]=0;
q.pop();
for (int i=h[u];~i;i=g[i].nxt)
{
int v=g[i].v,w=g[i].w;
if(dis[v]<dis[u]+v)
{
dis[v]=dis[u]+v;
cnt[v]=cnt[u]+1;
if(cnt[v]>=n+1) return 0;
if(!vis[v])
{
q.push(v);
vis[v]=1;
}
}
}
}
return 1;
}
int main()
{
memset(h, -1, sizeof h);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
add(a,b,-c);
}
for(int i=1;i<=n;i++)
add(0,i,0);
if(!spfa())
puts("NO");
else
{
for(int i=1;i<=n;i++)
cout<<dis[i]<<" ";
}
}