#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int a[10000][10000],inf=999999,n,p,x,y,c,m;
int d[50001];
int s[50001];
int v[50001];
int dijkstra (int nodStart) {
int viz=1;
v[nodStart]=1;
s[nodStart]=nodStart;
int minim=inf;
int poz=-1;
for (int i=1; i<=n; i++) {
d[i]=a[nodStart][i];
if (d[i]!=inf) {
s[i]=nodStart;
}
}
int pozPr=nodStart;
while (viz<n) {
minim=inf;
for (int i=1; i<=n; i++) {
if (d[i]<minim and v[i]==0) {
minim=d[i];
poz=i;
}
}
v[poz]=1;
// s[poz]=pozPr;
viz++;
for (int i=1; i<=n; i++) {
if (d[poz] + a[poz][i] < d[i]) {
d[i]=d[poz] + a[poz][i];
s[i]=poz;
}
}
pozPr=poz;
}
}
int main()
{
fin>>n>>m;
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
if (i==j) a[i][j]=0;
else a[i][j]=inf;
}
}
for (int i=1; i<=m; i++) {
fin>>x>>y>>c;
a[x][y]=c;
}
dijkstra(1);
// fout<<"d: ";
for (int i=2; i<=n; i++) {
if (d[i]==inf) fout<<0<<" ";
else fout<<d[i]<<" ";
}
// fout<<endl<<"s: ";
// for (int i=1; i<=n; i++) {
// fout<<s[i]<<" ";
// }
return 0;
}