QBHV - Hoán vị chữ cái
Tác giả: ladpro98
Ngôn ngữ: Pascal
program qbhv;
uses math;
const fi='';
var ch:array['A'..'Z'] of longint;
gt:array[1..10] of longint;
res:array[1..10] of char;
s:string[11];
inp:text;
len,counter:longint;
procedure input;
begin
assign(inp,fi);
reset(inp);
readln(inp,s);
len:=length(s);
close(inp);
end;
procedure init;
var i:longint;
begin
for i:=1 to len do
begin
inc(ch[s[i]]);
end;
gt[1]:=1;
for i:=2 to 9 do
gt[i]:=gt[i-1]*i;
end;
procedure calc;
var c:char;
begin
counter:=gt[len];
for c:='A' to 'Z' do
if ch[c]>0 then
counter:=counter div gt[ch[c]];
end;
procedure print;
var i:longint;
begin
for i:=1 to len do
write(res[i]);
writeln;
end;
procedure duyet(i:longint);
var c:char;
begin
if i>len then
begin
print;
exit;
end;
for c:='A' to 'Z' do
if ch[c]>0 then
begin
dec(ch[c]);
res[i]:=c;
duyet(i+1);
inc(ch[c]);
end;
end;
begin
input;
init;
calc;
writeln(counter);
duyet(1);
end.