#include <bits/stdc++.h>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
#define PII pair<int, int>
#define inf 1e9
#define NMAX 50001
vector <PII> v[NMAX];
priority_queue <PII, vector <PII>, greater <PII>> q;
int d[NMAX], n, m, i, a, b, c;
void dijkstra (int ns)
{
for (i=1;i<=n;i++) d[i]=inf;
d[ns]=0;
q.push({0,ns});
while (!q.empty())
{
int nod=q.top().second;
int cost=q.top().first;
q.pop();
if (d[nod]!=cost) continue;
for (i=0;i<v[nod].size();i++) { //luam fiecare vecin direct
int vnod=v[nod][i].second;
int vcost=v[nod][i].first;
if (vcost+cost < d[vnod]){
d[vnod]=vcost+cost;
q.push({d[vnod],vnod});
}
}
}
}
int main()
{
fin >> n >> m;
for (i=1;i<=m;i++) {
fin>>a>>b>>c;
v[a].push_back({c,b});
}
dijkstra (1);
for (i=2;i<=n;i++)
if (d[i]!=inf) fout<<d[i]<<" ";
else fout<<0<<" ";
return 0;
}