#include <stdio.h>
#define N 1005
#define inf 1<<20
int dist[N],dis[N][N];
int book[N];
int u,v;
int n,m;
int t,t1,t2;
void input()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j) dis[i][j]=0;
else dis[i][j]=inf;?
}
}
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&t1,&t2,&t);
dis[t1][t2]=t;
dis[t2][t1]=t;
}
for(int i=1;i<=n;i++)
{
dist[i]=dis[1][i];
}
}
void dijkstra(int n)
{
book[1]=1;
int p;
for(int i=1;i<=n;i++)
{
int temp=inf;// 一定注意,写到里面!!!!?
for(int j=1;j<=n;j++)
{
if(!book[j]&&dist[j]<temp)
{
p=j;
temp=dist[j];
}
}
book[p]=1;
for(int k=1;k<=n;k++)
{
if(dis[p][k]<inf)
{
if(dist[k]>dist[p]+dis[p][k])
{
dist[k]=dist[p]+dis[p][k];
}
}
}
}
}
int main()
{
scanf("%d %d",&n,&m);
input();
dijkstra(n);
for(int i=1;i<=n;i++)
{
printf("%d ",dist[i]);
}
}