#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int,int> pii;
int n,m;
vector<pii> g[5020];
int vis[5020];
int entry[5020];
int dis[5020];
queue<int> que;
bool spfa(int num)
{
que.push(num);
entry[num]=1;
vis[num]=1;
while(!que.empty())
{
int start=que.front();
vis[num]=0;
que.pop();
for(pii to:g[start])
{
if((dis[to.first])<(dis[start]+to.second))
{
dis[to.first]=dis[start]+to.second;
if(!vis[to.first])
{
vis[to.first]=1;
entry[to.first]++;
que.push(to.first);
if(entry[to.first]>=n+1) return true;
}
}
}
}
return false;
}
void mem()
{
for(int i=0;i<5020;i++)
dis[i]=-1;
dis[0]=0;
}
int main()
{
mem();
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
g[u].push_back({v,-w});
}
for(int i=1;i<=n;i++)
{
g[0].push_back({i,0});
}
if(spfa(0))
{
cout<<"NO";
}
else
{
for(int i=1;i<=n;i++)
{
cout<<dis[i]<<" ";
}
}
return 0;
}