(a/b)%c=a*b^(c-2)%c c为质数
#include<cstdio>
#include<map>
#include<cstring>
#define N 1000000007
using namespace std;
typedef long long ll;
ll quickpow(ll a,ll b)
{
ll r=1,c=a;
while(b)
{
if(b%2)
r*=c;
r%=N;
c*=c;
c%=N;
b/=2;
}
return r;
}
ll f(int n)
{
ll result=1;
for(int i=2;i<=n;i++)
result=(result*i)%1000000007;
return result;
}
int main()
{
ll T,n,i,len,num;
ll ans,flag;
char a[1100];
scanf("%lld",&T);
while(T--)
{
flag=1;
scanf("%s",a);
len=strlen(a);
map<char,ll> b;
for(i=0;i<len;i++)
{
b[a[i]]++;
}
map<char,ll>::iterator p;
num=0;
n=0;
for(p=b.begin();p!=b.end();p++)
{
n++;
if((p->second)%2==1)
num++;
}
if(len%2==1&&num!=1)
ans=0;
else if(len%2==1&&num==1)
{
ans=f(len/2);
for(p=b.begin();p!=b.end();p++)
{
if((p->second)>1)
{
flag*=f((p->second)/2);
flag%=N;
}
}
}
else if(len%2==0&&num!=0)
ans=0;
else if(len%2==0&&num==0)
{
ans=f(len/2);
for(p=b.begin();p!=b.end();p++)
{
if((p->second)%2==0)
{
flag*=f((p->second)/2);
flag%=N;
}
}
}
printf("%lld\n",(ans*quickpow(flag,N-2))%N);
}
return 0;
}