#include<bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
#define P pair<int,int>
#define PI acos(-1.0)
#define ls o<<1
#define rs o<<1|1
using namespace std;
  
const int mod=1e9+7;
const int base=19260817;
const LL INF=1e18;
const int maxn=2e5+10;
const double eps=1e-8;
int add(int x,int y){ x+=y;return x>=mod?x-mod:x; }
int sub(int x,int y){ x-=y;return x<0?x+mod:x; }
int mul(int x,int y){ return 1LL*x*y%mod; }

typedef pair<LL,int> pli;
int n,m;
LL d[maxn<<2];
bool vis[maxn<<2];
vector<P> g[maxn<<2];

void dijkstra(int n,int s)
{
    priority_queue<pli,vector<pli>,greater<pli>> q;
    for(int i=1;i<=n;i++) d[i]=INF,vis[i]=0;
    d[s]=0,q.push(pli{0,s});
    while(!q.empty()){
        pli x=q.top();q.pop();
        int u=x.second;
        if(vis[u]) continue;
        vis[u]=1;
        for(auto e:g[u]){
            int v=e.first,w=e.second;
            if(d[u]+w<d[v]){
                d[v]=d[u]+w;
                q.push(pli{d[v],v});
            }
        }
    }
}

inline void addedge(int u,int v,int w,int p,int q)
{
    g[u+p*n].push_back(P{v+q*n,w});
    g[v+p*n].push_back(P{u+q*n,w});
}

int main()
{
#ifdef LOCAL
    freopen("test.in","r",stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int u,v,w;cin>>u>>v>>w;
        addedge(u,v,w,0,0);
        addedge(u,v,w,1,1);
        addedge(u,v,w,2,2);
        addedge(u,v,w,3,3);
        addedge(u,v,0,0,1);
        addedge(u,v,0,2,3);
        addedge(u,v,2*w,0,2);
        addedge(u,v,2*w,1,3);
    }
    dijkstra(n<<2,1);
    for(auto e:g[1]){
        int v=e.first,w=e.second;
        if(v<=n) d[v+3*n]=min(d[v+3*n],1LL*w);
    }
    for(int i=2;i<=n;i++) cout<<d[i+3*n]<<" ";
    return 0;   
}