/*题目描述
设有n个元素要进行全排列,其中可能有相同的元素,例如abcc,设计一个算法,列出n个元素的不同排列。
输入格式
第一行:输入元素的个数n
第二行:输入n个元素
输出
输出n个元素的不同不同排列,每个排列一行。
最后一行为排列的个数。
样例输入
4
aacc
样例输出
aacc
acac
acca
caac
caca
ccaa
6
设有n个元素要进行全排列,其中可能有相同的元素,例如abcc,设计一个算法,列出n个元素的不同排列。
输入格式
第一行:输入元素的个数n
第二行:输入n个元素
输出
输出n个元素的不同不同排列,每个排列一行。
最后一行为排列的个数。
样例输入
4
aacc
样例输出
aacc
acac
acca
caac
caca
ccaa
6
*/
#include <iostream>
#include <string>
using namespace std;
static int sum=1;
//交换函数
void swap(char *a,char *b){
char *temp;
temp=a;
a=b;
b=a;
}
//判断是否交换
bool isswap(char *str,int a, int z){
for(int i = a; i < z; i++)
if(str[i] == str[z])
return false;
return true;
}
//递归
void perm(char str[],int k,int m){
if(k==m){
cout<<str<<endl;
sum++;
}
else{
for(int i=k;i<=m;i++)
if(isswap(str,k,i)){
swap(str[k],str[i]);
perm(str,k+1,m);
swap(str[k],str[i]);
}
}
}
//主函数
int main(){
int n;
cin>>n;
char s[10];
for(int i=0;i<n;i++)
cin>>s[i];
perm(s,0,n-1);
cout<<sum-1;
}