//Dijkstra算法,到点1的最小距离
#include<iostream>
#define zhf 100000000
using namespace std;
const int maxn=10001,maxm=100001;
int d[maxn],a[maxn][maxn],p[maxn];
int main(){
int i,j,k,m,n;
cin>>n>>m;
for(i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
a[x][y]=a[y][x]=z;
}
d[1]=0;
for(i=2;i<=n;i++)
d[i]=zhf;
for(i=1;i<=n;i++){
int zx=zhf;
for(j=1;j<=n;j++){
if(!p[j] && zx>d[j] ){
k=j;zx=d[j];
}
}
p[k]=1;
for(j=1;j<=n;j++)
if(!p[j] && a[k][j]!=0 && d[j]>a[k][j]+d[k]){
d[j]=a[k][j]+d[k];
}
}
for(i=1;i<=n;i++)
cout<<d[i]<<" ";
return 0;
}
/*
6 7
1 2 1
1 6 8
2 3 1
3 6 3
3 4 1
4 5 2
5 6 1
*/
#include<iostream>
#define zhf 100000000
using namespace std;
const int maxn=10001,maxm=100001;
int d[maxn],a[maxn][maxn],p[maxn];
int main(){
int i,j,k,m,n;
cin>>n>>m;
for(i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
a[x][y]=a[y][x]=z;
}
d[1]=0;
for(i=2;i<=n;i++)
d[i]=zhf;
for(i=1;i<=n;i++){
int zx=zhf;
for(j=1;j<=n;j++){
if(!p[j] && zx>d[j] ){
k=j;zx=d[j];
}
}
p[k]=1;
for(j=1;j<=n;j++)
if(!p[j] && a[k][j]!=0 && d[j]>a[k][j]+d[k]){
d[j]=a[k][j]+d[k];
}
}
for(i=1;i<=n;i++)
cout<<d[i]<<" ";
return 0;
}
/*
6 7
1 2 1
1 6 8
2 3 1
3 6 3
3 4 1
4 5 2
5 6 1
*/