#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<ios>
#include<iostream>
#include<float.h>
#include<map>
#include<string>
#include<queue>
#include<vector>
#define pi pair<long,long>
#define int long long
using namespace std;
struct graph{
int to,w;
};
vector<graph> G[100005];
void addedge(int u,int v,int to){
G[u].push_back((graph){v,to});
return;
}
priority_queue<pi, vector<pi>, greater<pi> > pq;
int dis[100005];
bool flag[100005];
void Dijkstra(int u){
memset(dis,0x3f,sizeof(dis));
memset(flag,0,sizeof(flag));
dis[u]=0;
pq.push(make_pair(0,u));
while(!pq.empty()){
pi sum=pq.top();
pq.pop();
if(flag[sum.second])continue;
else flag[sum.second]=1;
int v=sum.second;
for(int j=0;j<G[v].size();j++){
graph&e=G[v][j];
if(dis[e.to]>dis[v]+e.w){
dis[e.to]=dis[v]+e.w;
pq.push(make_pair(dis[e.to],e.to));
}
}
}
return;
}
signed main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
addedge(u,v,w);
addedge(v,u,w);
}
Dijkstra(1);
for(int i=2;i<=n;i++){
if(dis[i]==0x3f3f3f3f)cout<<-1<<" ";
else cout<<dis[i]<<" ";
}
cout<<endl;
return 0;
}
救救蒟蒻呗qwq