#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;
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+ICphZGo7CmxsIGRpc3RbTUFYXTsKCnZvaWQgZGlqa3N0cmEoaW50IHNyYykKewoJcHJpb3JpdHlfcXVldWU8cGlpLHZlY3RvcjxwaWk+LGdyZWF0ZXI8cGlpPj4gcHE7CglpbnQgeCx5OwoJbGwgd2VpZ2h0OwoJcGlpIHA7CgltZW1zZXQoZGlzdCxJTkYsc2l6ZW9mKGRpc3QpKTsKCWRpc3Rbc3JjXSA9MDsKCXBxLnB1c2gobXAoMCxzcmMpKTsKCXdoaWxlKCFwcS5lbXB0eSgpKQoJewoJCXggPSBwcS50b3AoKS5zZTsKCQlwcS5wb3AoKTsKCQlsaXN0PCBwYWlyPGxvbmcgbG9uZywgaW50PiA+OjppdGVyYXRvciBpOwogICAgICAgIGZvciAoaSA9IGFkalt4XS5iZWdpbigpOyBpICE9IGFkalt4XS5lbmQoKTsgKytpKQoJCXsKCQkJeSA9ICgqaSkuc2U7CgkJCXdlaWdodCA9KCppKS5maTsKCQkJaWYoZGlzdFt4XSt3ZWlnaHQ8ZGlzdFt5XSkKCQkJewoJCQkJZGlzdFt5XSA9IGRpc3RbeF0rd2VpZ2h0OwoJCQkJcHEucHVzaChtcChkaXN0W3ldLHkpKTsKCQkJfQoJCX0KCQkKCX0KfQppbnQgbWFpbigpIAp7CglpbnQgbm9kZXMsZWRnZXM7CglzaShub2Rlcyk7c2koZWRnZXMpOwoJaW50IHgseTsKCWxsIHd0OwoJRk9SKGksMCxlZGdlcykKCXsKCQlzaSh4KTtzaSh5KTtzbGwod3QpOwoJCWFkalt4XS5wYihtcCh3dCx5KSk7CgkJYWRqW3ldLnBiKG1wKHd0LHgpKTsKCX0KCWRpamtzdHJhKDEpOwoJRk9SKGksMixub2RlcysxKQoJewoJCXByaW50ZigiJWxsZCAiLGRpc3RbaV0pOwoJfQoJcmV0dXJuIDA7Cn0=