#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
long long n;
char a[3000];
long long aik;
long long flag;
unsigned long long chick;
long long mc=1000000007;
map<char, long long> ans;
unsigned long long zdda=1;
int FLAG;
unsigned long long flagpt;
int main() {
cin>>n>>a;
chick=n;
for(int i=int('a');i<=int('z');i++)
{
ans[char(i)]=0;
}
for(int i=0; i<n; i++) {
ans[a[i]]++;
// cout<<ans[a[i]]<<endl;
}
for(int i=int('a'); i<=int('z'); i++) {
if(ans[char(i)]%2!=0) {
aik++;
}
if(aik==2) {
flag=1;
break;
}
}
//cout<<"flag="<<flag;
if(flag==1) {
for(int i=n-1; i>1; i--) {
chick*=i;
}
cout<<chick;
return 0;
}
unsigned long long chick;
unsigned long long chick1;
for(int i=int('a');i<=int('z');i++)
{
if(ans[char(i)]!=0&&ans[char(i)]%2==0)
{
chick=ans[char(i)];
for(int j=ans[char(i)]-1;j>1;j--)
{
chick*=j;
}
//cout<<"ch0="<<chick<<endl;
chick1=ans[char(i)]/2;
for(int j=ans[char(i)]/2-1;j>1;j--)
{
chick1*=j;
}
//chick1=chick1*chick1;
zdda*=chick/chick1;
//cout<<"ch1="<<chick1<<endl;
continue;
}
if(ans[char(i)]>1&&ans[char(i)]%2==1)
{
FLAG=1;
flagpt=ans[char(i)];
chick=ans[char(i)]-1;
for(int j=ans[char(i)]-2;j>1;j--)
{
chick*=j;
}
//cout<<"ch0="<<chick<<endl;
chick1=(ans[char(i)]-1)/2;
for(int j=(ans[char(i)]-1)/2-1;j>1;j--)
{
chick1*=j;
}
//chick1=chick1*chick1;
zdda*=chick/chick1;
//cout<<"ch1="<<chick1<<endl;
continue;
}
}
chick=n/2;
for(int i=n/2-1;i>1;i--)
{
chick*=i;
}
zdda*=chick;
if(FLAG==1)
{
zdda*=flagpt;
}
chick1=n;
for(int i=n-1;i>1;i--)
{
chick1*=i;
}
cout<<"hbk="<<chick1<<endl;
zdda=chick1-zdda;
cout<<zdda%mc;
return 0;
}