#include <cstdio>
#include <algorithm>
#include<vector>
using namespace std;
int minim,i,aux,n,k,j,p,s,unu,t,m,doi,x,q,st,dr,maxi,sol,maxi2,viz[50010],y,conex,cost,d[50010],ok;
vector < pair<int, int> > v[50010];
int main()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&x,&y,&cost);
// printf("%d %d %d\n",x,y,cost);
v[x].push_back(make_pair(y,cost));
}
for(i=2;i<=n;i++)
{
d[i]=1000000000;
}
for(i=0;i<v[1].size();i++)
{
//printf("%d\n",v[1][i].first);
d[v[1][i].first]=v[1][i].second;
}
ok=0;
viz[1]=1;
while(ok==0)
{
minim=1000000000;
for(i=2;i<=n;i++)
{
if(viz[i]==0 && minim>d[i])
{
minim=d[i];
k=i;
}
}
if(minim!=1000000000)
{
viz[k]=1;
//printf("%d\n",k);
for(j=0;j<v[k].size();j++)
{
// printf("%d ",d[v[k][j].first]);
if(d[v[k][j].first] > minim+v[k][j].second)
{
d[v[k][j].first] = minim+v[k][j].second;
}
}
}
else ok=1;
}
for(i=2;i<=n;i++)
{
printf("%d ",d[i]);
}
}