QBHV - Hoán vị chữ cái
Tác giả: ll931110
Ngôn ngữ: Pascal
Program QBHV;
Const
input = '';
output = '';
Var
s: string;
n: integer;
x: array[1..9] of char;
d: array['A'..'Z'] of integer;
fac: array[0..9] of longint;
fi,fo: text;
Procedure openfile;
Begin
Assign(fi, input);
Reset(fi);
Assign(fo, output);
Rewrite(fo);
End;
Procedure init;
Var
i: integer;
Begin
Readln(fi, s);
n:= length(s);
Fillchar(d, sizeof(d), 0);
For i:= 1 to n do inc(d[s[i]]);
End;
Procedure factorial;
Var
i: integer;
Begin
fac[0]:= 1;
For i:= 1 to 9 do fac[i]:= fac[i - 1] * i;
End;
Procedure number;
Var
res: longint;
ch: char;
Begin
res:= fac[n];
For ch:= 'A' to 'Z' do res:= res div fac[d[ch]];
Writeln(fo, res);
End;
Procedure printresult;
Var
i: integer;
Begin
For i:= 1 to n do write(fo, x[i]);
Writeln(fo);
End;
Procedure attempt(i: integer);
Var
ch: char;
Begin
For ch:= 'A' to 'Z' do
if d[ch] > 0 then
Begin
x[i]:= ch;
If i = n then printresult else
Begin
dec(d[ch]);
Attempt(i + 1);
inc(d[ch]);
End;
End;
End;
Procedure closefile;
Begin
Close(fi);
Close(fo);
End;
Begin
openfile;
init;
factorial;
number;
attempt(1);
closefile;
End.