47 lines
1.0 KiB
ObjectPascal
47 lines
1.0 KiB
ObjectPascal
var
|
|
ans,n,j:longint;
|
|
c:char;
|
|
l:array[0..501] of char;
|
|
a:array['a'..'z'] of longint;
|
|
procedure print;
|
|
var
|
|
i:longint;
|
|
begin
|
|
inc(ans);
|
|
for i:=1 to n do write(l[i]);
|
|
writeln;
|
|
end;
|
|
|
|
procedure find(x:longint;c:char);
|
|
var
|
|
i:char;
|
|
begin
|
|
if x>n then print
|
|
else begin
|
|
for i:=c to 'z' do
|
|
if a[i] > 0 then
|
|
begin
|
|
l[x]:=i;
|
|
dec(a[i]);
|
|
if a[c]=0 then find(x+1,chr(ord(c)+1))
|
|
else find(x+1,c);
|
|
inc(a[i]);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
assign(input,'perm.in');reset(input);
|
|
assign(output,'perm.out');rewrite(output);
|
|
readln(n);
|
|
for j:=1 to n do
|
|
begin
|
|
read(c);
|
|
inc(a[c]);
|
|
end;
|
|
c:='a';
|
|
while a[c]=0 do c:=chr(ord(c)+1);
|
|
find(1,c);
|
|
writeln(ans);
|
|
close(input);close(output);
|
|
end. |