program mapa; const C=6; type vrchol = record hrany:array [1..C] of integer; deg:integer; zdroj:boolean; prosel:boolean; cesty:integer; end; var graf:array [1..C] of vrchol; topol:array[1..C] of integer; {cisla vrcholu v topologickem poradi} maxvrchol,maxhodnota:integer;{kde najdeme maximum a jaka je jeho hodnota} zdr:integer; {pocet zdroju} top:integer;{pocet vrcholu v topologickem usporadani z aktualniho zdroje} i,j,k,N,u,v:integer; zdroje:array [1..C] of record start,cil,cesty:integer; end; procedure pruchod(i:integer); var m:integer; begin m:=1; if not graf[i].prosel then begin while graf[i].deg>=m do begin writeln(i,graf[i].hrany[m]); pruchod(graf[i].hrany[m]); inc(m); end; graf[i].prosel:=TRUE; inc(top); writeln(top); topol[top]:=i; end; end; begin {nacteni} readln(N); for i:=1 to N do begin graf[i].deg:=0; graf[i].zdroj:=TRUE; end; readln(u,v); while u<>0 do begin inc(graf[u].deg); graf[v].zdroj:=FALSE; graf[u].hrany[graf[u].deg]:=v; readln(u,v); end; {nalezeni zdroju} zdr:=0; for i:=1 to N do begin if graf[i].zdroj then begin inc(zdr); zdroje[zdr].start:=i; end; end; writeln(1); {pruchod do hloubky - topologicke trideni ze zdrojovych vrcholu} for i:=1 to zdr do begin for j:=1 to N do graf[j].prosel:=FALSE; top:=0; pruchod(zdroje[i].start); for j:=1 to N do graf[j].cesty:=0; graf[topol[top]].cesty:=1; for j:= top downto 1 do begin v:=topol[j]; for k:=1 to graf[v].deg do begin u:=graf[v].hrany[k]; graf[u].cesty:=graf[u].cesty+graf[v].cesty; end; end; maxhodnota:=0; for j:=1 to N do if graf[j].cesty>maxhodnota then begin maxhodnota:=graf[j].cesty; maxvrchol:=j; end; zdroje[i].cil:=maxvrchol; zdroje[i].cesty:=maxhodnota; end; writeln('z=',zdr); maxhodnota:=0; for i:=1 to zdr do if zdroje[i].cesty>maxhodnota then begin maxhodnota:=zdroje[i].cesty; maxvrchol:=i; end; writeln('Mezi vrcholy ',zdroje[maxvrchol].start,' a ',zdroje[maxvrchol].cil,'vede ',zdroje[maxvrchol].cesty,'cest.'); {for s:=1 to N do if cesty[s]>max then begin maxs:=s; maxz:=zdroje[i]; max:=cesty[s]; end;} readln; end.