#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
char a[100001],s[100001],d[100001];
int b[100001],zs,asd[100001],n,ans;
void out(){
int i;
ans++;
for(i=1;i<=n;i++)
printf("%c",s[i]);
printf("\n");
}
void search(int i){
for(int j=1;j<=zs;j++){
if(b[j]){
b[j]--;
s[i]=d[j];
if(i<n)search(i+1);
else out();
b[j]++;
}
}
}
int main(){
freopen("perm.in","r",stdin);
freopen("perm.out","w",stdout);
int i,j,k;
scanf("%d\n",&n);
gets(a);
for(i=0;i<strlen(a);i++){
if(!asd[a[i]]){
zs++;asd[a[i]]++;d[zs]=a[i];
}
else asd[a[i]]++;
}
for(i=0;i<strlen(a);i++)
for(j=1;j<=zs;j++)
if(d[j]==a[i])b[j]=asd[a[i]];
search(1);
printf("%d\n",ans);
return 0;
}
有重复元素的排列问题
最新推荐文章于 2019-06-02 08:31:41 发布