#include <iostream>
#include <vector>
#include <limits>
#include <cstring>
using namespace std;
const int MAX = 300005;
const int QSIZE = 1000005;
int a, b, h, i;
long long c;
vector<vector<int>> graph(MAX);
vector<vector<long long>> peso(MAX);
vector<int> gsize(MAX, 0);
vector<int> gcapa(MAX, 1);
vector<long long> D(MAX);
void bfs(int partenza, int arrivo, vector<long long>& res) {
int qhead = 0, qcount = 1, j, k;
long long first, second;
vector<long long> q1(QSIZE), q2(QSIZE);
vector<bool> visited(MAX, false);
q1[0] = partenza;
q2[0] = 0;
while (qcount > 0) {
first = q1[qhead];
second = q2[qhead];
qhead = (qhead + 1) % QSIZE;
qcount--;
if (visited[first]=true) {
if (second < res[first]) {
res[first] = second;
} else {
continue;
}
}
visited[first] = true;
res[first] = second;
for (j = 0; j < gsize[first]; j++) {
q1[(qhead + qcount) % QSIZE] = graph[first][j];
q2[(qhead + qcount) % QSIZE] = second + peso[first][j];
qcount++;
}
}
}
void mincammino(int N, int M, vector<int> S, vector<int> E, vector<int> P, vector<long long>& D) {
for (h = 0; h < N; h++) {
graph[h].resize(1);
peso[h].resize(1);
gsize[h] = 0;
gcapa[h] = 1;
D[h] = numeric_limits<long long>::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]++;
}
bfs(0, N - 1, D);
for (int k = 0; k < N; k++) {
if (D[k] == numeric_limits<long long>::max()) {
D[k] = -1;
}
}
}
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';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGltaXRzPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYID0gMzAwMDA1Owpjb25zdCBpbnQgUVNJWkUgPSAxMDAwMDA1OwoKaW50ICBhLCBiLCAgaCwgaTsKbG9uZyBsb25nIGM7CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZ3JhcGgoTUFYKTsKdmVjdG9yPHZlY3Rvcjxsb25nIGxvbmc+PiBwZXNvKE1BWCk7CnZlY3RvcjxpbnQ+IGdzaXplKE1BWCwgMCk7CnZlY3RvcjxpbnQ+IGdjYXBhKE1BWCwgMSk7CnZlY3Rvcjxsb25nIGxvbmc+IEQoTUFYKTsKCgp2b2lkIGJmcyhpbnQgcGFydGVuemEsIGludCBhcnJpdm8sIHZlY3Rvcjxsb25nIGxvbmc+JiByZXMpIHsKICAgIGludCBxaGVhZCA9IDAsIHFjb3VudCA9IDEsIGosIGs7CiAgICBsb25nIGxvbmcgZmlyc3QsIHNlY29uZDsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IHExKFFTSVpFKSwgcTIoUVNJWkUpOwogICAgdmVjdG9yPGJvb2w+IHZpc2l0ZWQoTUFYLCBmYWxzZSk7CgogICAgcTFbMF0gPSBwYXJ0ZW56YTsgCiAgICBxMlswXSA9IDA7CgogICAgd2hpbGUgKHFjb3VudCA+IDApIHsKICAgICAgICBmaXJzdCA9IHExW3FoZWFkXTsKICAgICAgICBzZWNvbmQgPSBxMltxaGVhZF07CiAgICAgICAgcWhlYWQgPSAocWhlYWQgKyAxKSAlIFFTSVpFOwogICAgICAgIHFjb3VudC0tOwoKICAgICAgICBpZiAodmlzaXRlZFtmaXJzdF09dHJ1ZSkgewogICAgICAgICAgICBpZiAoc2Vjb25kIDwgcmVzW2ZpcnN0XSkgewogICAgICAgICAgICAgICAgcmVzW2ZpcnN0XSA9IHNlY29uZDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2aXNpdGVkW2ZpcnN0XSA9IHRydWU7CiAgICAgICAgcmVzW2ZpcnN0XSA9IHNlY29uZDsKCiAgICAgICAgZm9yIChqID0gMDsgaiA8IGdzaXplW2ZpcnN0XTsgaisrKSB7CiAgICAgICAgICAgIHExWyhxaGVhZCArIHFjb3VudCkgJSBRU0laRV0gPSBncmFwaFtmaXJzdF1bal07CiAgICAgICAgICAgIHEyWyhxaGVhZCArIHFjb3VudCkgJSBRU0laRV0gPSBzZWNvbmQgKyBwZXNvW2ZpcnN0XVtqXTsKICAgICAgICAgICAgcWNvdW50Kys7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIG1pbmNhbW1pbm8oaW50IE4sIGludCBNLCB2ZWN0b3I8aW50PiBTLCB2ZWN0b3I8aW50PiBFLCB2ZWN0b3I8aW50PiBQLCB2ZWN0b3I8bG9uZyBsb25nPiYgRCkgewogICAgZm9yIChoID0gMDsgaCA8IE47IGgrKykgewogICAgICAgIGdyYXBoW2hdLnJlc2l6ZSgxKTsKICAgICAgICBwZXNvW2hdLnJlc2l6ZSgxKTsKICAgICAgICBnc2l6ZVtoXSA9IDA7CiAgICAgICAgZ2NhcGFbaF0gPSAxOwogICAgICAgIERbaF0gPSBudW1lcmljX2xpbWl0czxsb25nIGxvbmc+OjptYXgoKTsKICAgIH0KCiAgICBmb3IgKGggPSAwOyBoIDwgTTsgaCsrKSB7CiAgICAgICAgYSA9IFNbaF07IAogICAgICAgIGIgPSBFW2hdOyAKICAgICAgICBjID0gUFtoXTsKICAgICAgICBpZiAoZ3NpemVbYV0gPT0gZ2NhcGFbYV0pIHsKICAgICAgICAgICAgZ2NhcGFbYV0gKj0gMjsKICAgICAgICAgICAgZ3JhcGhbYV0ucmVzaXplKGdjYXBhW2FdKTsKICAgICAgICAgICAgcGVzb1thXS5yZXNpemUoZ2NhcGFbYV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFthXVtnc2l6ZVthXV0gPSBiOwogICAgICAgIHBlc29bYV1bZ3NpemVbYV1dID0gYzsKICAgICAgICBnc2l6ZVthXSsrOwogICAgfQoKICAgIGJmcygwLCBOIC0gMSwgRCk7CiAgICBmb3IgKGludCBrID0gMDsgayA8IE47IGsrKykgewogICAgICAgIGlmIChEW2tdID09IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz46Om1heCgpKSB7CiAgICAgICAgICAgIERba10gPSAtMTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW50IE4sIE07CiAgICBjaW4gPj4gTiA+PiBNOwoKICAgIHZlY3RvcjxpbnQ+IFgoTSksIFkoTSksIFAoTSk7CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBEKE4pOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTTsgaSsrKSB7CiAgICAgICAgY2luID4+IFhbaV0gPj4gWVtpXSA+PiBQW2ldOwogICAgfQoKICAgIG1pbmNhbW1pbm8oTiwgTSwgWCwgWSwgUCwgRCk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICBjb3V0IDw8IERbaV0gPDwgJyAnOwogICAgfQogICAgY291dCA8PCAnXG4nOwp9Cg==