// Problem:
#include<iostream>
#include<stdio.h>
#include<cstdarg>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<string.h>
#define Int int
#define inf (1000000000)
#define INF (2000000000000000000ll)
#define pii std::pair<int, int>
#define pll std::pair<long long, long long>
#define pb emplace_back
#define fore(i,u,v) for(int i=head[u],v=e[i].v;i;i=e[i].nxt,v=e[i].v)
#define gmin(x, y) x=std::min(x, (y))
#define gmax(x, y) x=std::max(x, (y))
typedef long long ll;
int Memoryst;
ll mod = 1e9 + 7;
namespace IO {
ll read() {
ll x = 0, f = 1;char ch = getchar();
while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
while(ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
return x * f;
}
template <typename T>
void read(T &x) {x = read();}
template <typename T>
void PRTNUM(T x) {
if(x < 0) putchar('-'), x = -x;
if(x > 9) PRTNUM(x / 10);
putchar(x % 10 + 48);
}
template <typename T>
void print(T x) {
if(std::is_same<char, T>::value) putchar(x);
else PRTNUM(x);
}
template <typename T, typename ...Args>
void read(T &tmp, Args &...tmps) {read(tmp); read(tmps...);}
template <typename T, typename ...Args>
void print(T tmp, Args ...tmps) {print(tmp); print(tmps...);}
char gc(){char c=getchar();while(c==' '||c=='\n')c=getchar();return c;}
}
using namespace IO;
ll n;
ll cnt[26];
ll fact(ll x) {
ll res = 1;
for(ll i = 2; i <= x; i++) res = res * i % mod;
return res;
}
ll qpow(ll x, ll y) {
ll res = 1;
for(; y; y >>= 1, x = x * x % mod) if(y & 1) res = res * x % mod;
return res;
}
int Memoryed;
int main() {
// fprintf(stderr, "%.1lfMB\n", (&Memoryst - &Memoryed) / 262144.0);
read(n);
for(int i = 1; i <= n; i++) cnt[gc() - 'a']++;
ll odd = 0;
for(int i = 0; i < 26; i++) {
if(cnt[i] & 1) {
if(odd == 0) odd = i;
else {
odd = -1;
break;
}
}
}
ll ans = fact(n);
if(odd == -1) {
print(ans, '\n');
return 0;
}
// if(odd) cnt[odd]--;
// for(int i = 0; i < 26; i++) {
// print(cnt[i], ' ');
// }
ll deans = fact(n / 2);
for(int i = 0; i < 26; i++) {
deans = deans * qpow(fact(cnt[i] / 2), mod - 2) % mod;
}
// print(deans, '\n');
for(int i = 0; i < 26; i++) {
// print(cnt[i], ' ');
deans = deans * fact(cnt[i]) % mod;
} // puts("");
// print(deans, '\n');
// print(ans, '\n');
print((ans + mod - deans) % mod, '\n');
return 0;
}
WA on test 8
input
1998
baaaabbbabbaaabaaababbbaaaaabbbabaaaabbbaabaabaabaabbaabbababaabaaaaaababbbbaabaaabaabbabbbbabbbaabaabaaabbbabbbaaaaabbabbaaabbbbaabbabababaabbbabbbaabbaabbbabbbbaaababbaaabbbbbbaaaaaaaaaaaaaaababbbaaaabbbaaabaaabbbabaaababbaabbbabbaaabbababbabaabbbbaabaaaabbbaabababbbbbbbabababaaaaabaaaaabbabbabbbaaababbababbaaaabbbaaaabbbaaabaaaabbabbbbbbabbaaabbbbabbababbbababaaabaabaaaaababbbababababbbaaabaaabbaabbbaababbbaaaabbbabababbbbaabbabbababaaababababaaaaabaabbbaaabaaaaaabbbbbaaabbbbaabbaaabbbabbabaabaababbbbbbbbabbbaabbababaabababbbbabaaababbbbababbababbaabaaabbaabbababaabbabbabbaabaaabbabbbbbabbbabbbaabbabbaabbbbaaabaabbabbbaaababbbbabbabbabbaabaabbbaaababaaaaabbbbbbabababaaaababaabbbabaabaabbbabaaabbaaabbaaabaaabababbaabbaaabbabbbbabaaabaaaabaaabaaaaabbabbabbbababbbaaababbbbbbbbababbaaaaaaaabbbaababaababbaaababaabbabbaaabbabbaabbababaabaabaabbabaaaaabbbababbbaaaaabaabaaabbaaabbaabaabbaababbaabbaabbaaabbaabaaaaabbbbaababaabaaaabbbabbaaabbabaabbababaabbbbbabbbbaaaabaaabaabaabbbaaabaabaabbbabbabaabbbbbbbbbaaaabbabbaabbbabbaaaaaaaabaaaabbaaaaabbbabababababaabbbbabababaaaabaabaaababbaaabaaaabaabaaabaababbbbababbbbabbaaaaabbbbbbbbaabbbbaaabbabaaabaaaababbbbbabbbbbaababbbbbbbaabababbbbbbbabaabbbbabbaaabbbbabbabbabbbaababaaaaaababaabaaaabababbaababbaaaaaabbabbbaabaabbaaabbbaabaabaaabbaaabbabbbbaaaabaaaabbabaabaabbaabaabbbaabaaabbaababaabaaabbaabbababaaaabababaaabaabbbbaabbbabaabaabaabaabbbabbaaaaabaababbbbaaabbabaabaabaabbbaaaaabbbbbbbaaabbabababbaaabaabbaaaababaabbbbaaaabbabaabbbaababbbabbbababbabbaabbbbabbbabaabbbbabbabbababbbbbabaabbbaabaabbaaaaabbbbaaaaaaabbaabaabbbbbbbbaababbbababbbaababbbbababaaabbbabbbabbbbaaabaabbbabbbbbbbabababbaaabbaabbbbaaabbaaabbababbabaaaabaabbbabbbbaabbbaababaabbaaabababbbbbabaaaaaaaaabbbbaaabbaabaabaababaaaaabaabbaaabbbbabbabbaabbaaaabbabbaaaaabbbaaababbabaabaaabbaaaaaaabbabbaaabbbabbabbbaaabababbbaaabaabbaabaabbababbaaaababbbbabaaababbbababaabababbabbaabbbababaaabbaaaababbbbbaaabaaabbababbabbbaabbbbbbbbbababaaabbbbbaabbbbbaaabbaabbbbbbbaaaba
answer
652876718