#include <iostream>
#include <vector>
#include <limits>
using namespace std;
const int64_t MAX = 1000010;
const int64_t QSIZE = 3000000;
int64_t N, M, a, b, c, h, inizio, fine;
vector<vector<int64_t>> graph(MAX);
vector<vector<int64_t>> peso(MAX);
vector<int64_t> gsize(MAX, 0);
vector<int64_t> gcapa(MAX, 1);
vector<bool> visited(MAX, false);
vector<int64_t> dist(MAX, numeric_limits<int64_t>::max());
vector<int64_t> S(QSIZE), E(QSIZE), P(QSIZE);
vector<int64_t> q1(QSIZE), q2(QSIZE);
void bfs(int64_t partenza, int64_t arrivo, vector<int64_t>& res) {
int64_t qhead = 0, qcount = 1, first, second;
q1[0] = partenza;
q2[0] = 0;
fill(visited.begin(), visited.begin() + N, false);
while (qcount > 0) {
first = q1[qhead];
second = q2[qhead];
qhead = (qhead + 1) % QSIZE;
qcount--;
if (visited[first]) {
if (second < res[first]) {
res[first] = second;
} else {
continue;
}
}
visited[first] = true;
res[first] = second;
for (int64_t j = 0; j < gsize[first]; j++) {
q1[(qhead + qcount) % QSIZE] = graph[first][j];
q2[(qhead + qcount) % QSIZE] = second + peso[first][j];
qcount++;
}
}
}
int main() {
cin >> N >> M;
for (h = 0; h < M; h++) {
cin >> S[h] >> E[h] >> P[h];
}
for (h = 0; h < N; h++) {
graph[h].resize(1);
peso[h].resize(1);
dist[h] = numeric_limits<int64_t>::max();
}
for (h = 0; h < M; h++) {
a = S[h];
b = E[h];
c = P[h];
if (gsize[a] == gcapa[a]) {
gcapa[a] *= 2;
graph[a].resize(gcapa[a]);
peso[a].resize(gcapa[a]);
}
graph[a][gsize[a]] = b;
peso[a][gsize[a]] = c;
gsize[a]++;
}
inizio = 0;
for (h = 1; h <= N; h++) {
fine = h;
bfs(inizio, fine, dist);
}
for (h = 0; h < N; h++) {
if (dist[h] != numeric_limits<int64_t>::max()) {
cout << dist[h] << ' ';
} else {
cout << "-1 ";
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGltaXRzPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludDY0X3QgTUFYID0gMTAwMDAxMDsKY29uc3QgaW50NjRfdCBRU0laRSA9IDMwMDAwMDA7CgppbnQ2NF90IE4sIE0sIGEsIGIsIGMsIGgsIGluaXppbywgZmluZTsKdmVjdG9yPHZlY3RvcjxpbnQ2NF90Pj4gZ3JhcGgoTUFYKTsKdmVjdG9yPHZlY3RvcjxpbnQ2NF90Pj4gcGVzbyhNQVgpOwp2ZWN0b3I8aW50NjRfdD4gZ3NpemUoTUFYLCAwKTsKdmVjdG9yPGludDY0X3Q+IGdjYXBhKE1BWCwgMSk7CnZlY3Rvcjxib29sPiB2aXNpdGVkKE1BWCwgZmFsc2UpOwp2ZWN0b3I8aW50NjRfdD4gZGlzdChNQVgsIG51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSk7CnZlY3RvcjxpbnQ2NF90PiBTKFFTSVpFKSwgRShRU0laRSksIFAoUVNJWkUpOwp2ZWN0b3I8aW50NjRfdD4gcTEoUVNJWkUpLCBxMihRU0laRSk7Cgp2b2lkIGJmcyhpbnQ2NF90IHBhcnRlbnphLCBpbnQ2NF90IGFycml2bywgdmVjdG9yPGludDY0X3Q+JiByZXMpIHsKICAgIGludDY0X3QgcWhlYWQgPSAwLCBxY291bnQgPSAxLCBmaXJzdCwgc2Vjb25kOwogICAgcTFbMF0gPSBwYXJ0ZW56YTsgCiAgICBxMlswXSA9IDA7CgogICAgZmlsbCh2aXNpdGVkLmJlZ2luKCksIHZpc2l0ZWQuYmVnaW4oKSArIE4sIGZhbHNlKTsKCiAgICB3aGlsZSAocWNvdW50ID4gMCkgewogICAgICAgIGZpcnN0ID0gcTFbcWhlYWRdOwogICAgICAgIHNlY29uZCA9IHEyW3FoZWFkXTsKICAgICAgICBxaGVhZCA9IChxaGVhZCArIDEpICUgUVNJWkU7CiAgICAgICAgcWNvdW50LS07CgogICAgICAgIGlmICh2aXNpdGVkW2ZpcnN0XSkgewogICAgICAgICAgICBpZiAoc2Vjb25kIDwgcmVzW2ZpcnN0XSkgewogICAgICAgICAgICAgICAgcmVzW2ZpcnN0XSA9IHNlY29uZDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2aXNpdGVkW2ZpcnN0XSA9IHRydWU7CiAgICAgICAgcmVzW2ZpcnN0XSA9IHNlY29uZDsKCiAgICAgICAgZm9yIChpbnQ2NF90IGogPSAwOyBqIDwgZ3NpemVbZmlyc3RdOyBqKyspIHsKICAgICAgICAgICAgcTFbKHFoZWFkICsgcWNvdW50KSAlIFFTSVpFXSA9IGdyYXBoW2ZpcnN0XVtqXTsKICAgICAgICAgICAgcTJbKHFoZWFkICsgcWNvdW50KSAlIFFTSVpFXSA9IHNlY29uZCArIHBlc29bZmlyc3RdW2pdOwogICAgICAgICAgICBxY291bnQrKzsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgY2luID4+IE4gPj4gTTsKICAgIGZvciAoaCA9IDA7IGggPCBNOyBoKyspIHsKICAgICAgICBjaW4gPj4gU1toXSA+PiBFW2hdID4+IFBbaF07CiAgICB9CgogICAgZm9yIChoID0gMDsgaCA8IE47IGgrKykgewogICAgICAgIGdyYXBoW2hdLnJlc2l6ZSgxKTsKICAgICAgICBwZXNvW2hdLnJlc2l6ZSgxKTsKICAgICAgICBkaXN0W2hdID0gbnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpOwogICAgfQoKICAgIGZvciAoaCA9IDA7IGggPCBNOyBoKyspIHsKICAgICAgICBhID0gU1toXTsgCiAgICAgICAgYiA9IEVbaF07IAogICAgICAgIGMgPSBQW2hdOwoKICAgICAgICBpZiAoZ3NpemVbYV0gPT0gZ2NhcGFbYV0pIHsKICAgICAgICAgICAgZ2NhcGFbYV0gKj0gMjsKICAgICAgICAgICAgZ3JhcGhbYV0ucmVzaXplKGdjYXBhW2FdKTsKICAgICAgICAgICAgcGVzb1thXS5yZXNpemUoZ2NhcGFbYV0pOwogICAgICAgIH0KCiAgICAgICAgZ3JhcGhbYV1bZ3NpemVbYV1dID0gYjsKICAgICAgICBwZXNvW2FdW2dzaXplW2FdXSA9IGM7CiAgICAgICAgZ3NpemVbYV0rKzsKICAgIH0KCiAgICBpbml6aW8gPSAwOwogICAgZm9yIChoID0gMTsgaCA8PSBOOyBoKyspIHsKICAgICAgICBmaW5lID0gaDsKICAgICAgICBiZnMoaW5pemlvLCBmaW5lLCBkaXN0KTsKICAgIH0KCiAgICBmb3IgKGggPSAwOyBoIDwgTjsgaCsrKSB7CiAgICAgICAgaWYgKGRpc3RbaF0gIT0gbnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSB7CiAgICAgICAgICAgIGNvdXQgPDwgZGlzdFtoXSA8PCAnICc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY291dCA8PCAiLTEgIjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=