QBHV - Hoán vị chữ cái
Tác giả: RR
Ngôn ngữ: Pascal
var
cnt:longint;
a:string;
function find:longint;
var
i:longint;
begin
for i:=length(a)-1 downto 1 do
if a[i]<a[i+1] then exit(i);
exit(0);
end;
procedure sort(start,last:longint);
var
i,j:longint;
tmp:char;
begin
for i:=start to last-1 do
for j:=i+1 to last do
if a[j]<a[i] then
begin
tmp:=a[i];
a[i]:=a[j];
a[j]:=tmp;
end;
end;
procedure gen(print:boolean);
var
i,j,ln:longint;
tmp,c:char;
begin
i:=find;
cnt:=1; if print then writeln(a);
while i<>0 do
begin
ln:=i;
for j:=i to length(a) do
if (a[j]>a[i]) and ((a[j]<a[ln]) or (ln=i)) then ln:=j;
tmp:=a[ln]; a[ln]:=a[i]; a[i]:=tmp;
sort(i+1,length(a));
i:=find;
inc(cnt); if print then writeln(a);
end;
end;
begin
readln(a);
sort(1,length(a));
gen(false);
writeln(cnt);
sort(1,length(a));
gen(true);
end.