#include <bits/stdc++.h>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
struct arco {
int fine;
int peso;
};
void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long> &D) {
vector<arco> list[N];
D.resize(N);
for(int i=0; i<N; i++) D[i] = INT_MAX;
// Build adjacency list
for (int i = 0; i < M; i++) {
arco tmp;
tmp.fine = Y[i];
tmp.peso = P[i];
list[X[i]].push_back(tmp);
D[X[i]] = -1;
D[tmp.fine] = -1;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.push(make_pair(0, 0));
D[0] = 0;
while (!pq.empty()) {
int nodo = pq.top().first;
pq.pop();
for (arco next: list[nodo]) {
if (D[nodo] + next.peso < D[next.fine] || D[next.fine] == -1) {
D[next.fine] = D[nodo] + next.peso;
pq.push(make_pair(D[next.fine], next.fine));
}
}
}
}
int main() {
int N, M;
cin >> N >> M;
vector<int> X(M), Y(M), P(M);
vector<long long> D(N);
for (int i = 0; i < M; i++) {
cin >> X[i] >> Y[i] >> P[i];
}
mincammino(N, M, X, Y, P, D);
for (int i = 0; i < N; i++) {
cout << D[i] << ' ';
}
cout << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjbGltaXRzPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgpzdHJ1Y3QgYXJjbyB7CglpbnQgZmluZTsKCWludCBwZXNvOwp9OwoKdm9pZCBtaW5jYW1taW5vKGludCBOLCBpbnQgTSwgdmVjdG9yPGludD4gWCwgdmVjdG9yPGludD4gWSwgdmVjdG9yPGludD4gUCwgdmVjdG9yPGxvbmcgbG9uZz4gJkQpIHsKCXZlY3RvcjxhcmNvPiBsaXN0W05dOwoJRC5yZXNpemUoTik7Cglmb3IoaW50IGk9MDsgaTxOOyAgaSsrKSBEW2ldID0gSU5UX01BWDsKCS8vIEJ1aWxkIGFkamFjZW5jeSBsaXN0Cglmb3IgKGludCBpID0gMDsgaSA8IE07IGkrKykgewoJCWFyY28gdG1wOwoJCXRtcC5maW5lID0gWVtpXTsKCQl0bXAucGVzbyA9IFBbaV07CgkJbGlzdFtYW2ldXS5wdXNoX2JhY2sodG1wKTsKCQlEW1hbaV1dID0gLTE7CgkJRFt0bXAuZmluZV0gPSAtMTsKCX0KCXByaW9yaXR5X3F1ZXVlPHBhaXI8aW50LCBpbnQ+LCB2ZWN0b3I8cGFpcjxpbnQsIGludD4+LCBncmVhdGVyPHBhaXI8aW50LCBpbnQ+Pj4gcHE7CglwcS5wdXNoKG1ha2VfcGFpcigwLCAwKSk7CglEWzBdID0gMDsKCXdoaWxlICghcHEuZW1wdHkoKSkgewoJCWludCBub2RvID0gcHEudG9wKCkuZmlyc3Q7CgkKCQlwcS5wb3AoKTsKCQlmb3IgKGFyY28gbmV4dDogbGlzdFtub2RvXSkgewoJCQkKCQkJaWYgKERbbm9kb10gKyBuZXh0LnBlc28gPCBEW25leHQuZmluZV0gfHwgRFtuZXh0LmZpbmVdID09IC0xKSB7CgkJCQlEW25leHQuZmluZV0gPSBEW25vZG9dICsgbmV4dC5wZXNvOwoJCQkJcHEucHVzaChtYWtlX3BhaXIoRFtuZXh0LmZpbmVdLCBuZXh0LmZpbmUpKTsKCQkJfQoJCX0KCX0KfQogICAKCmludCBtYWluKCkgewogICAgaW50IE4sIE07CiAgICBjaW4gPj4gTiA+PiBNOwoKICAgIHZlY3RvcjxpbnQ+IFgoTSksIFkoTSksIFAoTSk7CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBEKE4pOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTTsgaSsrKSB7CiAgICAgICAgY2luID4+IFhbaV0gPj4gWVtpXSA+PiBQW2ldOwogICAgfQoKICAgIG1pbmNhbW1pbm8oTiwgTSwgWCwgWSwgUCwgRCk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICBjb3V0IDw8IERbaV0gPDwgJyAnOwogICAgfQogICAgY291dCA8PCAnXG4nOwp9Cg==