program mincammino;
const MAX = 200000;
QSIZE = 400000;
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, i, j : 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 i:=0 to N-1 do visited[i] := 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 mincamm (N,M:int64; S, E ,P : array of int64; var D : array of 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 i:= 0 to N-1 do if D[i]=maxlongint then D[i]:=-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]);
mincamm(N,M,X,Y,P,D);
for i:=0 to N-1 do write(D[i],' ');
end.
cHJvZ3JhbSBtaW5jYW1taW5vOwpjb25zdCBNQVggPSAyMDAwMDA7CiAgICAgIFFTSVpFID0gNDAwMDAwOwp2YXIgTiwgTSxhLGIsYyxoLGk6IGludDY0OwogICAgZ3JhcGggOiBhcnJheVswLi5NQVgtMV0gb2YgYXJyYXkgb2YgaW50NjQ7CiAgICBwZXNvIDogYXJyYXlbMC4uTUFYLTFdIG9mIGFycmF5IG9mIGludDY0OwogICAgZ3NpemUsIGdjYXBhOiBhcnJheVswLi5NQVgtMV0gb2YgaW50NjQ7CiAgICAKICAgIEQsIFgsWSxQIDogYXJyYXlbMC4uTUFYLTFdIG9mIGludDY0OwogICAgCgogCnByb2NlZHVyZSBiZnMocGFydGVuemEgOiBpbnQ2NDthcnJpdm86aW50NjQ7IHZhciByZXMgOiBhcnJheSBvZiBpbnQ2NCk7IAogdmFyIHFoZWFkLCBxY291bnQsIGZpcnN0LCBzZWNvbmQsIGksIGogOiBpbnQ2NDsKICAgICBxMSwgcTIgOiBhcnJheVswLi5RU0laRS0xXSBvZiBpbnQ2NDsKICAgICB2aXNpdGVkIDogYXJyYXlbMC4uTUFYLTFdIG9mIGJvb2xlYW47CiAgICAgCiBiZWdpbgogICBxMVswXSA6PSBwYXJ0ZW56YTsgcTJbMF0gOj0gMDsKICAgcWhlYWQgOj0gMDsgcWNvdW50IDo9IDE7CiAgIGZvciBpOj0wIHRvIE4tMSBkbyB2aXNpdGVkW2ldIDo9IEZhbHNlOwogICB3aGlsZSBxY291bnQgPiAwIGRvCiAgICAgICBiZWdpbgogICAgICAgICBmaXJzdCA6PSBxMVtxaGVhZF07CiAgICAgICAgIHNlY29uZCA6PSBxMltxaGVhZF07CiAgICAgICAgIGluYyhxaGVhZCk7CiAgICAgICAgIGlmIHFoZWFkID0gUVNJWkUgdGhlbgogICAgICAgICBxaGVhZCA6PSAwOwogICAgICAgICBkZWMocWNvdW50KTsKICAgICAgICAgaWYgKHZpc2l0ZWRbZmlyc3RdPXRydWUpIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWNvbmQ8cmVzW2ZpcnN0XSB0aGVuIHJlc1tmaXJzdF06PXNlY29uZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICB2aXNpdGVkW2ZpcnN0XSA6PSBUcnVlOwogICAgICAgICByZXNbZmlyc3RdIDo9IHNlY29uZDsKICAgICAgICAgZm9yIGo6PTAgdG8gZ3NpemVbZmlyc3RdLTEgZG8KICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICBxMVsocWhlYWQgKyBxY291bnQpIG1vZCBRU0laRV0gOj0gZ3JhcGhbZmlyc3RdW2pdOwogICAgICAgICAgICAgICAgICBxMlsocWhlYWQgKyBxY291bnQpIG1vZCBRU0laRV0gOj0gc2Vjb25kICsgcGVzb1tmaXJzdF1bal07CiAgICAgICAgICAgICAgICAgIGluYyhxY291bnQpOwogICAgICAgICAgICAgICAgZW5kOwogICAgICAgZW5kOwogZW5kOwogClByb2NlZHVyZSAgbWluY2FtbSAoTixNOmludDY0OyBTLCBFICxQIDogYXJyYXkgb2YgaW50NjQ7IHZhciBEIDogYXJyYXkgb2YgaW50NjQpOwoKYmVnaW4KZm9yIGg6PTAgdG8gTi0xIGRvCiAgIGJlZ2luCiAgICAgc2V0bGVuZ3RoKGdyYXBoW2hdLCAxKTsgCiAgICAgc2V0bGVuZ3RoKHBlc29baF0sIDEpOwogICAgIGdzaXplW2hdIDo9IDA7CiAgICAgZ2NhcGFbaF0gOj0gMTsKICAgICBEW2hdIDo9IG1heGxvbmdpbnQ7CiAgZW5kOwogZm9yIGg6PTAgdG8gTS0xIGRvCiAgICAgIGJlZ2luCiAgICAgICBhIDo9IFNbaF07IGIgOj0gRVtoXTsgYzo9UFtoXTsKICAgICAgIGlmIGdzaXplW2FdID0gZ2NhcGFbYV0gdGhlbgogICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgIGdjYXBhW2FdIDo9IGdjYXBhW2FdIHNobCAxOwogICAgICAgICAgICAgIHNldGxlbmd0aChncmFwaFthXSwgZ2NhcGFbYV0pOwogICAgICAgICAgICAgIHNldGxlbmd0aChwZXNvW2FdLCBnY2FwYVthXSk7CiAgICAgICAgICAgIGVuZDsKICAgICAgIGdyYXBoW2FdW2dzaXplW2FdXSA6PSBiOwogICAgICAgcGVzb1thXVtnc2l6ZVthXV0gOj0gYzsKICAgICAgIGluYyhnc2l6ZVthXSk7CiAgICAgZW5kOwogICAgYmZzKDAsTi0xLEQpOwogICAgZm9yIGk6PSAwIHRvIE4tMSBkbyAgIGlmIERbaV09bWF4bG9uZ2ludCB0aGVuIERbaV06PS0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBlbmQ7CmJlZ2luCiAgICgqYXNzaWduKGlucHV0LCAgJ2lucHV0LnR4dCcpOyAgcmVzZXQoaW5wdXQpOwogIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsqKQogIHJlYWRsbihOLE0pOyAKICBmb3IgaTo9MCB0byBNLTEgZG8gcmVhZGxuKFhbaV0sWVtpXSxQW2ldKTsKICBtaW5jYW1tKE4sTSxYLFksUCxEKTsKICBmb3IgaTo9MCB0byBOLTEgZG8gIHdyaXRlKERbaV0sJyAnKTsgCmVuZC4K