#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls o<<1
#define rs o<<1|1
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define sz(x) (int)(x).size()
#define all(x) (x).begin(),(x).end()
const double pi=acos(-1.0);
const double eps=1e-6;
const int mod=1e9+7;
const ll INF=1e18;
const int maxn=2e5+5;
ll read(){
	ll x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int n,m;
vector<pii>g[maxn];
ll dis[maxn][2][2];
int vis[maxn][2][2];
struct node{
	int no,sub,add;
	ll d;
};
struct cmp{
	bool operator()(node a,node b){
		return a.d>b.d;
	}
};
priority_queue<node,vector<node>,cmp>pq;
void dij(){
	for(int i=1;i<=n;i++){
		for(int j=0;j<2;j++){
			for(int k=0;k<2;k++){
				dis[i][j][k]=INF;
			}
		}
	}
	dis[1][0][0]=0;
	pq.push(node{1,0,0,0});
	while(!pq.empty()){
		node u=pq.top();
		pq.pop();
		if(vis[u.no][u.sub][u.add])continue;
		vis[u.no][u.sub][u.add]=1;
		for(auto v:g[u.no]){
			if(u.sub==0){
				if(u.d<dis[v.fi][1][u.add]){
					dis[v.fi][1][u.add]=u.d;
					pq.push(node{v.fi,1,u.add,dis[v.fi][1][u.add]});
				}
			}
			if(u.add==0){
				if(u.d+2*v.se<dis[v.fi][u.sub][1]){
					dis[v.fi][u.sub][1]=u.d+2*v.se;
					pq.push(node{v.fi,u.sub,1,dis[v.fi][u.sub][1]});
				}
			}
			if(u.add==0&&u.sub==0){
				if(u.d+v.se<dis[v.fi][1][1]){
					dis[v.fi][1][1]=u.d+v.se;
					pq.push(node{v.fi,1,1,dis[v.fi][1][1]});
				}
			}
			if(u.d+v.se<dis[v.fi][u.sub][u.add]){
				dis[v.fi][u.sub][u.add]=u.d+v.se;
				pq.push(node{v.fi,u.sub,u.add,dis[v.fi][u.sub][u.add]});
			}
		}
	}
}
int main(void){
	// freopen("in.txt","r",stdin);
	scanf("%d%d",&n,&m);
	int u,v,w;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&u,&v,&w);
		g[u].pb(mp(v,w));
		g[v].pb(mp(u,w));
	}
	dij();
	for(int i=2;i<=n;i++){
		printf("%lld ",dis[i][1][1]);
	}
	puts("");
	return 0;
}

						 	 		 	 	  	  		 	  	 		