{ 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.