代码
#include<stdio.h>
#include<string.h>
#define N 10000
char s[N];
int n,ans;
char b[N];
int c1[N],c2[N];
bool vis[N];
void dfs(int p)
{
if(p==n)
{
ans++;
for(int i=0; i<n; i++)
{
printf("%c",b[i]);
}
printf("\n");
return ;
}
for(int i=0; i<n; i++)
{
if(!i||s[i]!=s[i-1])
{
// int c1,c2;
// c1=c2=0;
// for(int j=0; j<p; j++) if(s[i]==b[j]) c1++;
// for(int j=0; j<n; j++) if(s[i]==s[j]) c2++;
if(c1[s[i]]<c2[s[i]])
{
c1[s[i]]++;
b[p]=s[i];
dfs(p+1);
c1[s[i]]--;
}
}
}
}
int main(){
scanf("%d%s",&n,s);
for(int i=0; i<strlen(s); i++) c2[s[i]]++;
dfs(0);
printf("%d\n",ans);
return 0;
}