#include <bits/stdc++.h>
#include <iostream>
#define MOD 1000000007//10e9+7;
#define MAX 100003
#define T() int t; scanf("%d",&t);while(t--)
#define FOR(i,a,b) for(int (i) = (a); (i) < (b); (i)++)
#define RFOR(i,a,b) for(int (i) = (a)-1; (i) >= (b); (i)--)
#define CLEAR(a) memset((a),0,sizeof(a))
#define all(v) v.begin(), v.end()
#define si(x) scanf("%d",&x)
#define sll(x) scanf("%lld",&x)
#define pi(x) printf("%d\n",x)
#define pll(x) printf("%lld\n",x)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
const long long INF =9999999;
typedef long long int ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<long long,int> pii;
typedef pair<ll,ll> pll;
list<pii> adj[MAX];
ll dist[MAX];
void dijkstra(int src)
{
priority_queue<pii,vector<pii>,greater<pii>> pq;
int x,y;
ll weight;
pii p;
memset(dist,INF,sizeof(dist));
dist[src] =0;
pq.push(mp(0,src));
while(!pq.empty())
{
x = pq.top().se;
pq.pop();
list< pair<long long, int> >::iterator i;
for (i = adj[x].begin(); i != adj[x].end(); ++i)
{
y = (*i).se;
weight =(*i).fi;
if(dist[x]+weight<dist[y])
{
dist[y] = dist[x]+weight;
pq.push(mp(dist[y],y));
}
}
}
}
int main()
{
int nodes,edges;
si(nodes);si(edges);
int x,y;
ll wt;
FOR(i,0,edges)
{
si(x);si(y);sll(wt);
adj[x].pb(mp(wt,y));
adj[y].pb(mp(wt,x));
}
dijkstra(1);
FOR(i,2,nodes+1)
{
printf("%lld ",dist[i]);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2RlZmluZSBNT0QgMTAwMDAwMDAwNy8vMTBlOSs3OwojZGVmaW5lIE1BWCAxMDAwMDMKI2RlZmluZSBUKCkgaW50IHQ7IHNjYW5mKCIlZCIsJnQpO3doaWxlKHQtLSkKI2RlZmluZSBGT1IoaSxhLGIpIGZvcihpbnQgKGkpID0gKGEpOyAoaSkgPCAoYik7IChpKSsrKQojZGVmaW5lIFJGT1IoaSxhLGIpIGZvcihpbnQgKGkpID0gKGEpLTE7IChpKSA+PSAoYik7IChpKS0tKQojZGVmaW5lIENMRUFSKGEpIG1lbXNldCgoYSksMCxzaXplb2YoYSkpCiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSwgdi5lbmQoKQojZGVmaW5lIHNpKHgpIHNjYW5mKCIlZCIsJngpCiNkZWZpbmUgc2xsKHgpIHNjYW5mKCIlbGxkIiwmeCkKI2RlZmluZSBwaSh4KSBwcmludGYoIiVkXG4iLHgpCiNkZWZpbmUgcGxsKHgpIHByaW50ZigiJWxsZFxuIix4KQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbXAgbWFrZV9wYWlyCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBsb25nIGxvbmcgSU5GID05OTk5OTk5OwoKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmw7CnR5cGVkZWYgcGFpcjxsb25nIGxvbmcsaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxsbCxsbD4gcGxsOwoKbGlzdDxwaWk+IGFkaltNQVhdOwpsbCBkaXN0W01BWF07Cgp2b2lkIGRpamtzdHJhKGludCBzcmMpCnsKCXByaW9yaXR5X3F1ZXVlPHBpaSx2ZWN0b3I8cGlpPixncmVhdGVyPHBpaT4+IHBxOwoJaW50IHgseTsKCWxsIHdlaWdodDsKCXBpaSBwOwoJbWVtc2V0KGRpc3QsSU5GLHNpemVvZihkaXN0KSk7CglkaXN0W3NyY10gPTA7CglwcS5wdXNoKG1wKDAsc3JjKSk7Cgl3aGlsZSghcHEuZW1wdHkoKSkKCXsKCQl4ID0gcHEudG9wKCkuc2U7CgkJcHEucG9wKCk7CgkJbGlzdDwgcGFpcjxsb25nIGxvbmcsIGludD4gPjo6aXRlcmF0b3IgaTsKICAgICAgICBmb3IgKGkgPSBhZGpbeF0uYmVnaW4oKTsgaSAhPSBhZGpbeF0uZW5kKCk7ICsraSkKCQl7CgkJCXkgPSAoKmkpLnNlOwoJCQl3ZWlnaHQgPSgqaSkuZmk7CgkJCWlmKGRpc3RbeF0rd2VpZ2h0PGRpc3RbeV0pCgkJCXsKCQkJCWRpc3RbeV0gPSBkaXN0W3hdK3dlaWdodDsKCQkJCXBxLnB1c2gobXAoZGlzdFt5XSx5KSk7CgkJCX0KCQl9CgkJCgl9Cn0KaW50IG1haW4oKSAKewoJaW50IG5vZGVzLGVkZ2VzOwoJc2kobm9kZXMpO3NpKGVkZ2VzKTsKCWludCB4LHk7CglsbCB3dDsKCUZPUihpLDAsZWRnZXMpCgl7CgkJc2koeCk7c2koeSk7c2xsKHd0KTsKCQlhZGpbeF0ucGIobXAod3QseSkpOwoJCWFkalt5XS5wYihtcCh3dCx4KSk7Cgl9CglkaWprc3RyYSgxKTsKCUZPUihpLDIsbm9kZXMrMSkKCXsKCQlwcmludGYoIiVsbGQgIixkaXN0W2ldKTsKCX0KCXJldHVybiAwOwp9