program PermuteString;
procedure Swap(var a, b: char);
var
temp: char;
begin
temp := a;
a := b;
b := temp;
end;
procedure generatePermutation(var str: string; l, r: integer);
var
i: integer;
begin
if l = r then
writeln(str)
else
for i := l to r do
begin
Swap(str[l + 1], str[i + 1]);
generatePermutation(str, l + 1, r);
Swap(str[l + 1], str[i + 1]); // backtrack
end;
end;
var
s: string;
begin
s := 'ABC';
generatePermutation(s, 0, Length(s) - 1);
end.
(*
run:
ABC
ACB
BAC
BCA
CBA
CAB
*)