#include<bits/stdc++.h>
#define pi 3.1415926535897932384626
using namespace std;

struct P{
  int x,y;
  long long z;
  bool operator < (const P &a )const{
    //if(x!=a.x) return x<a.x;
    return z>a.z;
  };
};

int a,b,c,d,i,n,m,e,ee,k,dx[10]={1,0,-1,0,1,1,-1,-1},dy[10]={0,1,0,-1,1,-1,1,-1};
long long o[200011][4];
int l[1];
int ss[1];
int ans[1];


long long x,y,z,mod=1000000007,hf=(mod+1)/2;




//string r;
char r[1],r2[33];
vector<P> v[201011];
P u[1];
priority_queue<P> q;


set<P> s;
//stack<int> s;
unordered_map<int,bool> p;
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
//rng()
bool as(P a,P b)
{
  //if(a.x!=b.x)
  //return a.x<b.x;
  return a.y<b.y;
}


int main()
{
  scanf("%d %d",&a,&b);
  for(int t=1;t<=b;t++)
  {
    scanf("%d %d %d",&n,&m,&k);
    v[n].push_back({m,k});
    v[m].push_back({n,k});
  }
  for(int t=1;t<=a;t++)
    for(int h=0;h<4;h++)
      o[t][h]=mod*mod;
  o[1][0]=0;
  q.push({1,0,0});
  for(;q.size();)
  if(o[q.top().x][q.top().y]==q.top().z)
  {
    P s=q.top();
    q.pop();
    for(int h=0;h<v[s.x].size();h++)
    {
      if(s.y<2&&o[v[s.x][h].x][s.y+2]>s.z)
      {
        o[v[s.x][h].x][s.y+2]=s.z;
        q.push({v[s.x][h].x,s.y+2,s.z});
      }
      if(s.y%2==0&&o[v[s.x][h].x][s.y+1]>s.z+v[s.x][h].y*2)
      {
        o[v[s.x][h].x][s.y+1]=s.z+v[s.x][h].y*2;
        q.push({v[s.x][h].x,s.y+1,s.z+v[s.x][h].y*2});
      }
      if(o[v[s.x][h].x][s.y]>s.z+v[s.x][h].y)
      {
        o[v[s.x][h].x][s.y]=s.z+v[s.x][h].y;
        q.push({v[s.x][h].x,s.y,s.z+v[s.x][h].y});
      }
    }
  }
  else q.pop();
  
  for(int t=2;t<=a;t++)
    printf("%lld ",min(o[t][0],o[t][3]));
}
