#include <bits/stdc++.h>
#define pairr pair<int, int>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
const int INF = (1 << 30);
const int MAXN = 50005;
int way[MAXN];
vector < pairr > v[MAXN];
int n, m, x, y, z;
bitset <MAXN> wasQ;
priority_queue <pairr> q;
void dijkstra(int start){
int nod, nxt, cst;
for(int i=1; i<=n; i++)
way[i] = INF;
way[start] = 0;
q.push({0, start});
while(!q.empty()){
nod = q.top().second;
q.pop();
if(wasQ[nod] == false)
for(int i=0; i<v[nod].size(); i++){
nxt = v[nod][i].first;
cst = v[nod][i].second;
if(way[nxt] == INF){
way[nxt] = way[nod] + cst;
q.push({-way[nxt], nxt});
}
}
wasQ[nod] = true;
}
}
int main (){
fin>>n>>m;
while(m--){
fin>>x>>y>>z;
v[x].push_back({y, z});
}
dijkstra(1);
for(int i=2; i<=n; i++)
if(way[i] != INF)
fout<<way[i]<<" ";
else
fout<<"0 ";
return 0;
}