#include<stdio.h>
#include<iostream>
using namespace std;
//重复元素的判断条件
bool check(char *arr,int k,int n){
for(int i=k;i<n;i++){
if(arr[i]==arr[n])return false;//判断前面是否已经出现过这个字符,如果出现过就返回false,没出现过就出现true;
}
return true;
}
void exchange(char &a,char &b){//交换两个字符
char c;
c=a;
a=b;
b=c;
}
void perm(char *arr,int k,int n,int &count){
if(k==n){
cout<<arr[0];//函数到达最后一层只有一个数没法全排列了就输出
for(int i=1;i<n;i++){
cout<<arr[i];
}
cout<<endl;
count++;
}
else{
for(int i=k;i<n;i++){
if(check(arr,k,i)){//重复元素的判断条件
exchange(arr[k],arr[i]);//交换保持不变的数的值
perm(arr,k+1,n,count);//递归求全排列
exchange(arr[k],arr[i]);//交换回来
}
}
}
}
int main(){
int n;
scanf("%d",&n);
char arr[n];
for(int i=0;i<n;i++){
cin>>arr[i];
}
int count=0;
perm(arr,0,n,count);
cout<<count;
}