#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif
#define ll long long int
#define md 1000000007
#define vi vector<int>
#define mx(a,b,c,d) max(a, max(b, max(c,d)))
#define MP make_pair
#define pb push_back
#define ppb pop_back
ll modular_exponentiation(ll base, ll exponent)
{
ll res=1;
while(exponent>0)
{
if(exponent%2==0){
base=(base*base)%md;
exponent/=2;
}
else{
res=(res*base)%md;
exponent--;
}
}
return res;
}
const ll S=1e7+1;
bool arr1[(long long)S] ;
void sieve(){
memset(arr1, true, sizeof(arr1));
for(int i=2; i*i<=(long long)S; i++){
if(arr1[i]==true){
for(int j=i*i; j<=(long long)1e7; j+=i){
arr1[j]=false;
}
}
}
//for (int i = 2; i <= 1e6; i++)
//if (arr1[i]==true)
//cout << "YES" << " ";
}
auto pos(vector<ll> arr){
for(int i=0; i<(int)arr.size(); i++){
if(arr[i]>=0){
return true;
}
}
return false;
}
auto even(int x){
return x%2==0;
}
//struct Edge{
//ll src, des, wt;
//};
ll m,n;
vector<tuple<ll, ll ,ll> > edges;
void BellmanFord(){
vector<ll> parents;
vector<ll> value;
parents.resize(n, -1);
value.resize(n, md);
//edges.resize(10000000);
value[0]=0;
parents[0]=-1;
for(int i=0; i<n-1; i++){
for(auto& edge: edges){
ll u,v,wt;
tie(u,v,wt)=edge;
debug(u,v,wt);
//ll u=edges[j].src;
//ll v=edges[j].des;
//ll wt=edges[j].wt;
if(value[u]!=md and value[u]+wt<value[v]){
value[v]=value[u]+wt;
parents[v]=u;
}
}
}
cout<<endl;
debug(parents);
debug(value);
//for(auto& it:value)cout<<it<<" ";
}
void solve()
{
cin>>n>>m;
//vector<Edge> edges(m);
for(int i=0; i<m; i++){
ll src,des,wt;
cin>>src>>des>>wt;
edges.pb({src,des,wt});
//src--, des--, wt--;
//edges[i].src=src;
//edges[i].des=des;
//edges[i].wt=wt;
}
//ll a,b,c;
//tie(a,b,c);
BellmanFord();
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//int T;
//cin>>T;
sieve();
// while (T--){
solve();
cerr << "time taken : " << (float)clock() / CLOCKS_PER_SEC << " secs" << endl;
//}
}
CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPiAKI2luY2x1ZGU8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4gCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgX19wcmludChpbnQgeCkge2NlcnIgPDwgeDt9CnZvaWQgX19wcmludChsb25nIHgpIHtjZXJyIDw8IHg7fQp2b2lkIF9fcHJpbnQobG9uZyBsb25nIHgpIHtjZXJyIDw8IHg7fQp2b2lkIF9fcHJpbnQodW5zaWduZWQgeCkge2NlcnIgPDwgeDt9CnZvaWQgX19wcmludCh1bnNpZ25lZCBsb25nIHgpIHtjZXJyIDw8IHg7fQp2b2lkIF9fcHJpbnQodW5zaWduZWQgbG9uZyBsb25nIHgpIHtjZXJyIDw8IHg7fQp2b2lkIF9fcHJpbnQoZmxvYXQgeCkge2NlcnIgPDwgeDt9CnZvaWQgX19wcmludChkb3VibGUgeCkge2NlcnIgPDwgeDt9CnZvaWQgX19wcmludChsb25nIGRvdWJsZSB4KSB7Y2VyciA8PCB4O30Kdm9pZCBfX3ByaW50KGNoYXIgeCkge2NlcnIgPDwgJ1wnJyA8PCB4IDw8ICdcJyc7fQp2b2lkIF9fcHJpbnQoY29uc3QgY2hhciAqeCkge2NlcnIgPDwgJ1wiJyA8PCB4IDw8ICdcIic7fQp2b2lkIF9fcHJpbnQoY29uc3Qgc3RyaW5nICZ4KSB7Y2VyciA8PCAnXCInIDw8IHggPDwgJ1wiJzt9CnZvaWQgX19wcmludChib29sIHgpIHtjZXJyIDw8ICh4ID8gInRydWUiIDogImZhbHNlIik7fQoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVj4Kdm9pZCBfX3ByaW50KGNvbnN0IHBhaXI8VCwgVj4gJngpIHtjZXJyIDw8ICd7JzsgX19wcmludCh4LmZpcnN0KTsgY2VyciA8PCAnLCc7IF9fcHJpbnQoeC5zZWNvbmQpOyBjZXJyIDw8ICd9Jzt9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgX19wcmludChjb25zdCBUICZ4KSB7aW50IGYgPSAwOyBjZXJyIDw8ICd7JzsgZm9yIChhdXRvICZpOiB4KSBjZXJyIDw8IChmKysgPyAiLCIgOiAiIiksIF9fcHJpbnQoaSk7IGNlcnIgPDwgIn0iO30Kdm9pZCBfcHJpbnQoKSB7Y2VyciA8PCAiXVxuIjt9CnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBWPgp2b2lkIF9wcmludChUIHQsIFYuLi4gdikge19fcHJpbnQodCk7IGlmIChzaXplb2YuLi4odikpIGNlcnIgPDwgIiwgIjsgX3ByaW50KHYuLi4pO30KI2lmbmRlZiBPTkxJTkVfSlVER0UKI2RlZmluZSBkZWJ1Zyh4Li4uKSBjZXJyIDw8ICJbIiA8PCAjeCA8PCAiXSA9IFsiOyBfcHJpbnQoeCkKI2Vsc2UKI2RlZmluZSBkZWJ1Zyh4Li4uKQojZW5kaWYKCiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIG1kIDEwMDAwMDAwMDcKI2RlZmluZSB2aSB2ZWN0b3I8aW50PiAKI2RlZmluZSBteChhLGIsYyxkKSBtYXgoYSwgbWF4KGIsIG1heChjLGQpKSkKI2RlZmluZSBNUCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBwcGIgcG9wX2JhY2sKCgpsbCBtb2R1bGFyX2V4cG9uZW50aWF0aW9uKGxsIGJhc2UsIGxsIGV4cG9uZW50KQp7IAoJbGwgcmVzPTE7Cgl3aGlsZShleHBvbmVudD4wKQoJewoJCWlmKGV4cG9uZW50JTI9PTApewoJCQliYXNlPShiYXNlKmJhc2UpJW1kOwoJCQlleHBvbmVudC89MjsKCQl9CgkJZWxzZXsKCQkJcmVzPShyZXMqYmFzZSklbWQ7CgkJCWV4cG9uZW50LS07CgkJCSAKCQl9Cgl9CgkJcmV0dXJuIHJlczsJCn0KCmNvbnN0IGxsIFM9MWU3KzE7CmJvb2wgYXJyMVsobG9uZyBsb25nKVNdIDsKCnZvaWQgc2lldmUoKXsKCQoJCgltZW1zZXQoYXJyMSwgdHJ1ZSwgc2l6ZW9mKGFycjEpKTsKCQoKCWZvcihpbnQgaT0yOyBpKmk8PShsb25nIGxvbmcpUzsgaSsrKXsKCQkKCQlpZihhcnIxW2ldPT10cnVlKXsKCQkJCgoJCQkKCQkJZm9yKGludCBqPWkqaTsgajw9KGxvbmcgbG9uZykxZTc7IGorPWkpewoJCQkJCgkJCQlhcnIxW2pdPWZhbHNlOwoJCQkJCgkJCX0KCQl9Cgl9CgkKCS8vZm9yIChpbnQgaSA9IDI7IGkgPD0gMWU2OyBpKyspCiAgICAgICAgLy9pZiAoYXJyMVtpXT09dHJ1ZSkKICAgICAgICAgICAgLy9jb3V0IDw8ICJZRVMiIDw8ICIgIjsKCQoJCn0KYXV0byBwb3ModmVjdG9yPGxsPiBhcnIpewoJCglmb3IoaW50IGk9MDsgaTwoaW50KWFyci5zaXplKCk7IGkrKyl7CgkJaWYoYXJyW2ldPj0wKXsKCQkJCgkJCXJldHVybiB0cnVlOwoJCX0KCQkKCX0KCXJldHVybiBmYWxzZTsKCQp9CmF1dG8gZXZlbihpbnQgeCl7CgkKCXJldHVybiB4JTI9PTA7CgkKfQovL3N0cnVjdCBFZGdlewoJCgkvL2xsIHNyYywgZGVzLCB3dDsKCQovL307CgoKbGwgbSxuOwp2ZWN0b3I8dHVwbGU8bGwsIGxsICxsbD4gPiBlZGdlczsKdm9pZCBCZWxsbWFuRm9yZCgpewoJCgl2ZWN0b3I8bGw+IHBhcmVudHM7Cgl2ZWN0b3I8bGw+IHZhbHVlOwoKCXBhcmVudHMucmVzaXplKG4sIC0xKTsKCXZhbHVlLnJlc2l6ZShuLCBtZCk7CgkvL2VkZ2VzLnJlc2l6ZSgxMDAwMDAwMCk7CgkKCXZhbHVlWzBdPTA7CgkKCXBhcmVudHNbMF09LTE7CgkKCgkKCWZvcihpbnQgaT0wOyBpPG4tMTsgaSsrKXsKCQkKCQlmb3IoYXV0byYgZWRnZTogZWRnZXMpewoJCQkKCQkJbGwgdSx2LHd0OwoJCQkKCQkJdGllKHUsdix3dCk9ZWRnZTsKCQkJZGVidWcodSx2LHd0KTsKCQkJLy9sbCB1PWVkZ2VzW2pdLnNyYzsKCQkJLy9sbCB2PWVkZ2VzW2pdLmRlczsKCQkJLy9sbCB3dD1lZGdlc1tqXS53dDsKCQkJaWYodmFsdWVbdV0hPW1kIGFuZCB2YWx1ZVt1XSt3dDx2YWx1ZVt2XSl7CgkJCQkKCQkJCXZhbHVlW3ZdPXZhbHVlW3VdK3d0OwoJCQkJcGFyZW50c1t2XT11OwoJCQkJCgkJCX0KCQl9CgkJCgl9CgkKCWNvdXQ8PGVuZGw7CglkZWJ1ZyhwYXJlbnRzKTsKCWRlYnVnKHZhbHVlKTsKCQoJLy9mb3IoYXV0byYgaXQ6dmFsdWUpY291dDw8aXQ8PCIgIjsKfQoKCnZvaWQgc29sdmUoKQp7CQkKCQoJY2luPj5uPj5tOwoJCgkvL3ZlY3RvcjxFZGdlPiBlZGdlcyhtKTsKCQoJCQlmb3IoaW50IGk9MDsgaTxtOyBpKyspewoJCQkJCgkJCQlsbCBzcmMsZGVzLHd0OwoJCQkJY2luPj5zcmM+PmRlcz4+d3Q7CgkJCQllZGdlcy5wYih7c3JjLGRlcyx3dH0pOwoJCQkJCgkJCQkvL3NyYy0tLCBkZXMtLSwgd3QtLTsKCQkJCS8vZWRnZXNbaV0uc3JjPXNyYzsKCQkJCS8vZWRnZXNbaV0uZGVzPWRlczsKCQkJCS8vZWRnZXNbaV0ud3Q9d3Q7CgkJCQkKCQkJfQoJLy9sbCBhLGIsYzsKCS8vdGllKGEsYixjKTsKCUJlbGxtYW5Gb3JkKCk7CgkKCQp9CgppbnQgbWFpbigpIHsKCQkKIGlvczo6c3luY193aXRoX3N0ZGlvKDApLCBjaW4udGllKDApLCBjb3V0LnRpZSgwKTsKCi8vaW50IFQ7CiAgICAvL2Npbj4+VDsKICAgIHNpZXZlKCk7CiAgIC8vIHdoaWxlIChULS0pewoJCXNvbHZlKCk7CgkJY2VyciA8PCAidGltZSB0YWtlbiA6ICIgPDwgKGZsb2F0KWNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQyA8PCAiIHNlY3MiIDw8IGVuZGw7CgoJCS8vfQoJCQoKCn0KCgo=