//单源最短路
#include <bits/stdc++.h>
using namespace std;
int mp[505][505];
int book[505];
const int inf = 1e9+5;
int dis[505];
int n,m;
void dijkstra()
{
for(int i=1;i<=n-1;i++)
{
int mn = inf;
int u;
for(int j=1;j<=n;j++)
{
if( (!book[j]) &&dis[j]<mn)
{
mn = dis[j];
u = j;
}
}
book[u] = 1;
for(int j=1;j<=n;j++)
{
if(dis[j]>mp[u][j]+dis[u])
{
dis[j]=mp[u][j]+dis[u];
}
}
}
}
int main()
{
for(int i=1;i<505;i++)
for(int j=1;j<505;j++)
mp[i][j] = inf;
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
int t1,t2,t3;
scanf("%d %d %d",&t1,&t2,&t3);
mp[t1][t2]=t3;
}
for(int i=1;i<=n;i++)
dis[i] = mp[1][i],book[i]=0;
//1号点到每个点的最短距离
dis[1]=0;
dijkstra();
for(int i=1;i<=n;i++)
printf("%d ",dis[i]);
return 0;
}
/*
6 9
1 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 5 13
4 6 15
5 6 4
0 1 8 4 13 17
*/