program camminominimo;
const MAX = 200000;
QSIZE = 600000;
var N, M,a,b,c,h,i: int64;
graph : array[0..MAX-1] of array of int64;
peso : array[0..MAX-1] of array of int64;
gsize, gcapa: array[0..MAX-1] of int64;
D, X,Y,P : array[0..MAX-1] of int64;
procedure bfs(partenza : int64;arrivo:int64; var res : array of int64);
var qhead, qcount, first, second, j, k : int64;
q1, q2 : array[0..QSIZE-1] of int64;
visited : array[0..MAX-1] of boolean;
begin
q1[0] := partenza; q2[0] := 0;
qhead := 0; qcount := 1;
for k:=0 to N-1 do visited[k] := False;
while qcount > 0 do
begin
first := q1[qhead];
second := q2[qhead];
inc(qhead);
if qhead = QSIZE then
qhead := 0;
dec(qcount);
if (visited[first]=true) then
begin
if second<res[first] then res[first]:=second
else continue;
end;
visited[first] := True;
res[first] := second;
for j:=0 to gsize[first]-1 do
begin
q1[(qhead + qcount) mod QSIZE] := graph[first][j];
q2[(qhead + qcount) mod QSIZE] := second + peso[first][j];
inc(qcount);
end;
end;
end;
Procedure mincammino (N,M:int64; S, E ,P : array of int64; var D : array of int64);
var k: int64;
begin
for h:=0 to N-1 do
begin
setlength(graph[h], 1);
setlength(peso[h], 1);
gsize[h] := 0;
gcapa[h] := 1;
D[h] := maxlongint;
end;
for h:=0 to M-1 do
begin
a := S[h]; b := E[h]; c:=P[h];
if gsize[a] = gcapa[a] then
begin
gcapa[a] := gcapa[a] shl 1;
setlength(graph[a], gcapa[a]);
setlength(peso[a], gcapa[a]);
end;
graph[a][gsize[a]] := b;
peso[a][gsize[a]] := c;
inc(gsize[a]);
end;
bfs(0,N-1,D);
for k:= 0 to N-1 do if D[k]=maxlongint then D[k]:=-1;
end;
begin
(*assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);*)
readln(N,M);
for i:=0 to M-1 do readln(X[i],Y[i],P[i]);
mincammino(N,M,X,Y,P,D);
for i:=0 to N-1 do write(D[i],' ');
end.
cHJvZ3JhbSBjYW1taW5vbWluaW1vOwpjb25zdCBNQVggPSAyMDAwMDA7CiAgICAgIFFTSVpFID0gNjAwMDAwOwp2YXIgTiwgTSxhLGIsYyxoLGk6IGludDY0OwogICAgZ3JhcGggOiBhcnJheVswLi5NQVgtMV0gb2YgYXJyYXkgb2YgaW50NjQ7CiAgICBwZXNvIDogYXJyYXlbMC4uTUFYLTFdIG9mIGFycmF5IG9mIGludDY0OwogICAgZ3NpemUsIGdjYXBhOiBhcnJheVswLi5NQVgtMV0gb2YgaW50NjQ7CiAgICAKICAgIEQsIFgsWSxQIDogYXJyYXlbMC4uTUFYLTFdIG9mIGludDY0OwogICAgCgogCnByb2NlZHVyZSBiZnMocGFydGVuemEgOiBpbnQ2NDthcnJpdm86aW50NjQ7IHZhciByZXMgOiBhcnJheSBvZiBpbnQ2NCk7IAogdmFyIHFoZWFkLCBxY291bnQsIGZpcnN0LCBzZWNvbmQsIGosIGsgOiBpbnQ2NDsKICAgICBxMSwgcTIgOiBhcnJheVswLi5RU0laRS0xXSBvZiBpbnQ2NDsKICAgICB2aXNpdGVkIDogYXJyYXlbMC4uTUFYLTFdIG9mIGJvb2xlYW47CiAgICAgCiBiZWdpbgogICBxMVswXSA6PSBwYXJ0ZW56YTsgcTJbMF0gOj0gMDsKICAgcWhlYWQgOj0gMDsgcWNvdW50IDo9IDE7CiAgIGZvciBrOj0wIHRvIE4tMSBkbyB2aXNpdGVkW2tdIDo9IEZhbHNlOwogICB3aGlsZSBxY291bnQgPiAwIGRvCiAgICAgICBiZWdpbgogICAgICAgICBmaXJzdCA6PSBxMVtxaGVhZF07CiAgICAgICAgIHNlY29uZCA6PSBxMltxaGVhZF07CiAgICAgICAgIGluYyhxaGVhZCk7CiAgICAgICAgIGlmIHFoZWFkID0gUVNJWkUgdGhlbgogICAgICAgICBxaGVhZCA6PSAwOwogICAgICAgICBkZWMocWNvdW50KTsKICAgICAgICAgaWYgKHZpc2l0ZWRbZmlyc3RdPXRydWUpIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWNvbmQ8cmVzW2ZpcnN0XSB0aGVuIHJlc1tmaXJzdF06PXNlY29uZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICB2aXNpdGVkW2ZpcnN0XSA6PSBUcnVlOwogICAgICAgICByZXNbZmlyc3RdIDo9IHNlY29uZDsKICAgICAgICAgZm9yIGo6PTAgdG8gZ3NpemVbZmlyc3RdLTEgZG8KICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICBxMVsocWhlYWQgKyBxY291bnQpIG1vZCBRU0laRV0gOj0gZ3JhcGhbZmlyc3RdW2pdOwogICAgICAgICAgICAgICAgICBxMlsocWhlYWQgKyBxY291bnQpIG1vZCBRU0laRV0gOj0gc2Vjb25kICsgcGVzb1tmaXJzdF1bal07CiAgICAgICAgICAgICAgICAgIGluYyhxY291bnQpOwogICAgICAgICAgICAgICAgZW5kOwogICAgICAgZW5kOwogZW5kOwogClByb2NlZHVyZSAgbWluY2FtbWlubyAoTixNOmludDY0OyBTLCBFICxQIDogYXJyYXkgb2YgaW50NjQ7IHZhciBEIDogYXJyYXkgb2YgaW50NjQpOwp2YXIgazogaW50NjQ7CgpiZWdpbgpmb3IgaDo9MCB0byBOLTEgZG8KICAgYmVnaW4KICAgICBzZXRsZW5ndGgoZ3JhcGhbaF0sIDEpOyAKICAgICBzZXRsZW5ndGgocGVzb1toXSwgMSk7CiAgICAgZ3NpemVbaF0gOj0gMDsKICAgICBnY2FwYVtoXSA6PSAxOwogICAgIERbaF0gOj0gbWF4bG9uZ2ludDsKICBlbmQ7CiBmb3IgaDo9MCB0byBNLTEgZG8KICAgICAgYmVnaW4KICAgICAgIGEgOj0gU1toXTsgYiA6PSBFW2hdOyBjOj1QW2hdOwogICAgICAgaWYgZ3NpemVbYV0gPSBnY2FwYVthXSB0aGVuCiAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgZ2NhcGFbYV0gOj0gZ2NhcGFbYV0gc2hsIDE7CiAgICAgICAgICAgICAgc2V0bGVuZ3RoKGdyYXBoW2FdLCBnY2FwYVthXSk7CiAgICAgICAgICAgICAgc2V0bGVuZ3RoKHBlc29bYV0sIGdjYXBhW2FdKTsKICAgICAgICAgICAgZW5kOwogICAgICAgZ3JhcGhbYV1bZ3NpemVbYV1dIDo9IGI7CiAgICAgICBwZXNvW2FdW2dzaXplW2FdXSA6PSBjOwogICAgICAgaW5jKGdzaXplW2FdKTsKICAgICBlbmQ7CiAgICBiZnMoMCxOLTEsRCk7CiAgICBmb3Igazo9IDAgdG8gTi0xIGRvICAgaWYgRFtrXT1tYXhsb25naW50IHRoZW4gRFtrXTo9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIGVuZDsKYmVnaW4KICAgKCphc3NpZ24oaW5wdXQsICAnaW5wdXQudHh0Jyk7ICByZXNldChpbnB1dCk7CiAgYXNzaWduKG91dHB1dCwgJ291dHB1dC50eHQnKTsgcmV3cml0ZShvdXRwdXQpOyopCiAgcmVhZGxuKE4sTSk7IAogIGZvciBpOj0wIHRvIE0tMSBkbyByZWFkbG4oWFtpXSxZW2ldLFBbaV0pOwogIG1pbmNhbW1pbm8oTixNLFgsWSxQLEQpOwogIGZvciBpOj0wIHRvIE4tMSBkbyAgd3JpdGUoRFtpXSwnICcpOyAKZW5kLgo=