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.