这道题就是 生成排列
// uva 10098
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int cnt1,cnt2;
void perm(char P[], char A[],int n, int cur) {
if(cur==n) {
for(int i=0;i<n;i++)
printf("%c",A[i]);
printf("\n");
} else {
for(int i=0;i<n;i++)
if(!i||P[i]!=P[i-1]) {
cnt1=0;
cnt2=0;
for(int j=0;j<cur;j++) if(A[j]==P[i]) cnt1++;
for(int j=0;j<n;j++) if(P[j]==P[i]) cnt2++;
if(cnt1<cnt2) {
A[cur] = P[i];
perm(P,A,n,cur+1);
}
}
}
}
int main() {
int n;
scanf("%d",&n);
getchar();
char **p = new char*[n];
for(int i=0;i<n;i++) {
p[i] = new char[11];
}
char *a = new char[11];
for(int i=0;i<n;i++) {
gets(p[i]);
int len= strlen(p[i]);
sort(p[i],p[i] + len);
perm(p[i],a,len,0);
printf("\n");
}
return 0;
}