#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[ u] .begin ( ) ; i ! = adj[ u] .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+OjppdGVyYXRvciBpOwogICAgICAgIGZvciAoaSA9IGFkalt1XS5iZWdpbigpOyBpICE9IGFkalt1XS5lbmQoKTsgKytpKQoJCXsKCQkJeSA9ICgqaSkuc2U7CgkJCXdlaWdodCA9KCppKS5maTsKCQkJaWYoZGlzdFt4XSt3ZWlnaHQ8ZGlzdFt5XSkKCQkJewoJCQkJZGlzdFt5XSA9IGRpc3RbeF0rd2VpZ2h0OwoJCQkJcHEucHVzaChtcChkaXN0W3ldLHkpKTsKCQkJfQoJCX0KCQkKCX0KfQppbnQgbWFpbigpIAp7CglpbnQgbm9kZXMsZWRnZXM7CglzaShub2Rlcyk7c2koZWRnZXMpOwoJaW50IHgseTsKCWxsIHd0OwoJRk9SKGksMCxlZGdlcykKCXsKCQlzaSh4KTtzaSh5KTtzbGwod3QpOwoJCWFkalt4XS5wYihtcCh3dCx5KSk7CgkJYWRqW3ldLnBiKG1wKHd0LHgpKTsKCX0KCWRpamtzdHJhKDEpOwoJRk9SKGksMixub2RlcysxKQoJewoJCXByaW50ZigiJWxsZCAiLGRpc3RbaV0pOwoJfQoJcmV0dXJuIDA7Cn0=