const MaxK = 1000; MaxN = 1000; var N:integer; Cesta:array[1..MaxN] of integer; Navstivena:array[1..MaxK] of integer; Krizovatka:integer; Zacatek,Pozice:integer; Nejdelsi_Zacatek,Nejdelsi_Delka:integer; begin readln(N); for Pozice:=1 to N do begin read(Krizovatka); Cesta[Pozice] := Krizovatka; Navstivena[Krizovatka] := -1; end; {načtení vstupu a inicializace pole s posledními návštěvami křižovatek} Nejdelsi_Zacatek := 1; Nejdelsi_Delka := 0; Zacatek := 1; for Pozice:=1 to N do begin if Navstivena[Cesta[Pozice]] >= Zacatek then Zacatek := Navstivena[Cesta[Pozice]] + 1; {je potřeba nejdelší úsek zkrátit?} if Pozice - Zacatek + 1 > Nejdelsi_Delka then begin {úprava nejdelšího nalezeného úseku je-li třeba} Nejdelsi_Zacatek := Zacatek; Nejdelsi_Delka := Pozice-Zacatek + 1; end; Navstivena[Cesta[Pozice]] := Pozice; {opravení poslední návštěvy aktuální křižovatky} end; for Pozice := Nejdelsi_Zacatek to Nejdelsi_Zacatek + Nejdelsi_Delka - 1 do write(Cesta[Pozice],' '); end.