
#include <bits/stdc++.h>
#define ll long long
#define mod 1000000007
#define N 1000001
using
namespace
std;
void
Precomputefact(unordered_map<ll, ll>& fac)
{
ll ans = 1;
for
(ll i = 1; i <= N; i++) {
ans = (ans * i) % mod;
fac[i] = ans;
}
return
;
}
bool
isVowel(
char
a)
{
if
(a ==
'A'
|| a ==
'E'
|| a ==
'I'
|| a ==
'O'
|| a ==
'U'
)
return
true
;
else
return
false
;
}
void
countAnagrams(string s,
int
n)
{
unordered_map<ll, ll> fac;
Precomputefact(fac);
unordered_map<
char
, ll> count;
int
vo = 0, co = 0;
for
(
int
i = 0; i < n; i++) {
count[s[i]]++;
if
(isVowel(s[i]))
vo++;
else
co++;
}
if
((co == vo + 1) || (co == vo)) {
ll deno = 1;
for
(
auto
c : count) {
deno = (deno * fac[c.second]) % mod;
}
ll nume = fac[co] % mod;
nume = (nume * fac[vo]) % mod;
ll ans = nume / deno;
cout << ans;
}
else
{
cout << 0;
}
}
int
main()
{
string S =
"GADO"
;
int
l = S.size();
countAnagrams(S, l);
return
0;
}
0 comments:
Post a Comment