#include <iostream>
#include <vector>
#include <limits>
#include <cstring>
using namespace std;
const int MAX =300000;
const int QSIZE = 1000000;
int a, b, c, h, i;
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, first, second, j, k;
vector<int> 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]) {
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';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGltaXRzPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYID0zMDAwMDA7CmNvbnN0IGludCBRU0laRSA9IDEwMDAwMDA7CgppbnQgIGEsIGIsIGMsIGgsIGk7CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZ3JhcGgoTUFYKTsKdmVjdG9yPHZlY3Rvcjxsb25nIGxvbmc+PiBwZXNvKE1BWCk7CnZlY3RvcjxpbnQ+IGdzaXplKE1BWCwgMCk7CnZlY3RvcjxpbnQ+IGdjYXBhKE1BWCwgMSk7CnZlY3Rvcjxsb25nIGxvbmc+IEQoTUFYKTsKCgp2b2lkIGJmcyhpbnQgcGFydGVuemEsIGludCBhcnJpdm8sIHZlY3Rvcjxsb25nIGxvbmc+JiByZXMpIHsKICAgIGludCBxaGVhZCA9IDAsIHFjb3VudCA9IDEsIGZpcnN0LCBzZWNvbmQsIGosIGs7CiAgICB2ZWN0b3I8aW50PiBxMShRU0laRSksIHEyKFFTSVpFKTsKICAgIHZlY3Rvcjxib29sPiB2aXNpdGVkKE1BWCwgZmFsc2UpOwoKICAgIHExWzBdID0gcGFydGVuemE7IAogICAgcTJbMF0gPSAwOwoKICAgIHdoaWxlIChxY291bnQgPiAwKSB7CiAgICAgICAgZmlyc3QgPSBxMVtxaGVhZF07CiAgICAgICAgc2Vjb25kID0gcTJbcWhlYWRdOwogICAgICAgIHFoZWFkID0gKHFoZWFkICsgMSkgJSBRU0laRTsKICAgICAgICBxY291bnQtLTsKCiAgICAgICAgaWYgKHZpc2l0ZWRbZmlyc3RdKSB7CiAgICAgICAgICAgIGlmIChzZWNvbmQgPCByZXNbZmlyc3RdKSB7CiAgICAgICAgICAgICAgICByZXNbZmlyc3RdID0gc2Vjb25kOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZpc2l0ZWRbZmlyc3RdID0gdHJ1ZTsKICAgICAgICByZXNbZmlyc3RdID0gc2Vjb25kOwoKICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ3NpemVbZmlyc3RdOyBqKyspIHsKICAgICAgICAgICAgcTFbKHFoZWFkICsgcWNvdW50KSAlIFFTSVpFXSA9IGdyYXBoW2ZpcnN0XVtqXTsKICAgICAgICAgICAgcTJbKHFoZWFkICsgcWNvdW50KSAlIFFTSVpFXSA9IHNlY29uZCArIHBlc29bZmlyc3RdW2pdOwogICAgICAgICAgICBxY291bnQrKzsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgbWluY2FtbWlubyhpbnQgTiwgaW50IE0sIHZlY3RvcjxpbnQ+IFMsIHZlY3RvcjxpbnQ+IEUsIHZlY3RvcjxpbnQ+IFAsIHZlY3Rvcjxsb25nIGxvbmc+JiBEKSB7CiAgICBmb3IgKGggPSAwOyBoIDwgTjsgaCsrKSB7CiAgICAgICAgZ3JhcGhbaF0ucmVzaXplKDEpOwogICAgICAgIHBlc29baF0ucmVzaXplKDEpOwogICAgICAgIGdzaXplW2hdID0gMDsKICAgICAgICBnY2FwYVtoXSA9IDE7CiAgICAgICAgRFtoXSA9IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz46Om1heCgpOwogICAgfQoKICAgIGZvciAoaCA9IDA7IGggPCBNOyBoKyspIHsKICAgICAgICBhID0gU1toXTsgCiAgICAgICAgYiA9IEVbaF07IAogICAgICAgIGMgPSBQW2hdOwogICAgICAgIGlmIChnc2l6ZVthXSA9PSBnY2FwYVthXSkgewogICAgICAgICAgICBnY2FwYVthXSAqPSAyOwogICAgICAgICAgICBncmFwaFthXS5yZXNpemUoZ2NhcGFbYV0pOwogICAgICAgICAgICBwZXNvW2FdLnJlc2l6ZShnY2FwYVthXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2FdW2dzaXplW2FdXSA9IGI7CiAgICAgICAgcGVzb1thXVtnc2l6ZVthXV0gPSBjOwogICAgICAgIGdzaXplW2FdKys7CiAgICB9CgogICAgYmZzKDAsIE4gLSAxLCBEKTsKICAgIGZvciAoaW50IGsgPSAwOyBrIDwgTjsgaysrKSB7CiAgICAgICAgaWYgKERba10gPT0gbnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4KCkpIHsKICAgICAgICAgICAgRFtrXSA9IC0xOwogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgTiwgTTsKICAgIGNpbiA+PiBOID4+IE07CgogICAgdmVjdG9yPGludD4gWChNKSwgWShNKSwgUChNKTsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IEQoTik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNOyBpKyspIHsKICAgICAgICBjaW4gPj4gWFtpXSA+PiBZW2ldID4+IFBbaV07CiAgICB9CgogICAgbWluY2FtbWlubyhOLCBNLCBYLCBZLCBQLCBEKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIGNvdXQgPDwgRFtpXSA8PCAnICc7CiAgICB9CiAgICBjb3V0IDw8ICdcbic7Cn0K