#include<stdio.h>
#include<string.h>
#define MOD 1000000007
long long fact(long long x)
{
long long f=1;
if(x==0)
return 1;
else
{
for(int i=1;i<=x;i++)
f=f*(i%MOD);
}
return f%MOD;
}
long long square(long long x)
{
return x*x;
}
long long power(long long base,long long expo)
{
if(base==0)
return 0;
if(expo==0)
return 1;
else
{
if(expo%2==0)
return square(power(base,expo/2))%MOD;
else
return (base*power(base,expo-1))%MOD;
}
}
int main()
{
int arr[26];
char ip[1000000];
long long num,den=1;
for(int i=0;i<len;i++)
arr[ip[i]-'a']++;
for(int i=0;i<26;i++)
arr[i]/=2;
num=fact(len/2);
for(int i=0;i<26;i++)
{
den=den*(fact(arr[i]));
}
den=den%MOD;
den=power(den,MOD-2);
printf("%lld\n",((num
%MOD
)*(den
%MOD
))%MOD
); //printf("%lld",fact((long long)5));
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKbG9uZyBsb25nIGZhY3QobG9uZyBsb25nIHgpCnsKCWxvbmcgbG9uZyBmPTE7CglpZih4PT0wKQoJCXJldHVybiAxOwoJZWxzZQoJewoJCWZvcihpbnQgaT0xO2k8PXg7aSsrKQoJCQlmPWYqKGklTU9EKTsKCX0KCXJldHVybiBmJU1PRDsKfQpsb25nIGxvbmcgc3F1YXJlKGxvbmcgbG9uZyB4KQp7CglyZXR1cm4geCp4Owp9CmxvbmcgbG9uZyBwb3dlcihsb25nIGxvbmcgYmFzZSxsb25nIGxvbmcgZXhwbykKewoJaWYoYmFzZT09MCkKCQlyZXR1cm4gMDsKCWlmKGV4cG89PTApCgkJcmV0dXJuIDE7CgllbHNlCgl7CgkJaWYoZXhwbyUyPT0wKQoJCQlyZXR1cm4gc3F1YXJlKHBvd2VyKGJhc2UsZXhwby8yKSklTU9EOwoJCWVsc2UKCQkJcmV0dXJuIChiYXNlKnBvd2VyKGJhc2UsZXhwby0xKSklTU9EOwoJfQp9CmludCBtYWluKCkKewoJaW50IGFyclsyNl07CgljaGFyIGlwWzEwMDAwMDBdOwoJc2NhbmYoIiVzIixpcCk7Cglsb25nIGxvbmcgbnVtLGRlbj0xOwoJaW50IGxlbj1zdHJsZW4oaXApOwoJZm9yKGludCBpPTA7aTxsZW47aSsrKQoJCWFycltpcFtpXS0nYSddKys7Cglmb3IoaW50IGk9MDtpPDI2O2krKykKCQlhcnJbaV0vPTI7CgludW09ZmFjdChsZW4vMik7Cglmb3IoaW50IGk9MDtpPDI2O2krKykKCXsKCQlkZW49ZGVuKihmYWN0KGFycltpXSkpOwoJfQoJZGVuPWRlbiVNT0Q7CglkZW49cG93ZXIoZGVuLE1PRC0yKTsKCXByaW50ZigiJWxsZFxuIiwoKG51bSVNT0QpKihkZW4lTU9EKSklTU9EKTsKCS8vcHJpbnRmKCIlbGxkIixmYWN0KChsb25nIGxvbmcpNSkpOwp9