{ Program vypise vsechny permutace N prvku } Const N = 3; Type TMnozina = Record A : Array[1 .. N] Of Char; Poc : Integer; End; Var M : TMnozina; S : String; Procedure Permutuj(Var Prefix : String; Var M : TMnozina); Var C, Pom : Char; I, Delka : Integer; Begin If M.Poc = 0 Then Begin Writeln(Prefix); Exit; End; { uschovame a odebereme prvni prvek } C := M.A[1]; For I := 1 To M.Poc - 1 Do M.A[I] := M.A[I+1]; Dec(M.Poc); Prefix := Prefix + C; Permutuj(Prefix, M); Delka := Length(Prefix); { postupne budeme vracet a odebirat vsechny ostatni prvky } For I := 1 To M.Poc Do Begin { prohodim uschovany prvek s tim, ktery je na rade } Pom := M.A[I]; M.A[I] := C; C := Pom; { pripravime prefix} Prefix[Delka] := C; Permutuj(Prefix, M); End; { Vratime vse do puvodniho stavu } Prefix := Copy(Prefix, 1, Delka - 1); Inc(M.Poc); M.A[M.Poc] := C; End; Procedure NastavMnozinu(K : Integer; Var M : TMnozina); Var I : Integer; Begin M.Poc := K; For I := 1 To K Do M.A[I] := Chr(Ord('A') + I - 1); End; Begin Writeln; NastavMnozinu(N, M); S := ''; Permutuj(S, M); End.