#include <iostream>
#include <cstdio>
#include <cstring>
#include <string.h>
#define INF 999999
using namespace std;
int vis[1000];
int map[1000][1000];
int d[1000];
int n;
void Dijkstra(int x)
{
int i,j,M,k;
vis[x]=1;
for(i=1;i<=n;i++)
{
d[i]=map[x][i];//先取与起始点相连的点
}
d[x]=0;
for(i=1;i<=n;i++)//单纯遍历n次,无实际意义
{
M=INF;
for(j=1;j<=n;j++)
{
if(d[j]<M&&!vis[j])//在路径中找到一个最小的值
{
k=j;//记录下标
M=d[j];
}
}
vis[k]=1;
for(j=1;j<=n;j++)
{
if(!vis[j]&&M+map[k][j]<d[j])//已经被标记过的点已经是最小值了
{
d[j]=M+map[k][j];
}
//map[k][j]就是k点到j点的距离,M就是起始点到k的距离
//加起来就是起始点到j的距离
}
}
for(i=1;i<=n;i++)
{
printf("%d ",d[i]);
}
}
int main()
{
int i,j,a,b,w;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;i++)
{
map[i][j]=INF;
}
}
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&a,&b,&w);
map[a][b]=w;
}
Dijkstra(1);
}