#include #include namespace solution { int t[30]; char s[2000]; const long long MOD=1e9+7; long long qpow(long long fi,long long se) { int o=0; long long tmp=se; while(tmp) { o++; tmp>>=1; } long long re=1; for(int i=o-1;i>=0;i--) { re=re*re%MOD; if((se>>i)&1) { re=re*fi%MOD; } } return re; } long long ji[2000]; long long nij[2000]; void solve() { memset(t,0,sizeof(t)); scanf("%s",s+1); int n=strlen(s+1); for(int i=1;i<=n;i++) { t[s[i]-'a'+1]++; } int toj=0; long long ans=1; for(int i=1;i<=26;i++) { if(t[i]&1) toj++; ans=ans*nij[t[i]>>1]%MOD; } ans=ans*ji[n>>1]%MOD; if(toj>1) ans=0; printf("%d\n",(int)ans); } void init() { ji[0]=1; nij[0]=1; for(int i=1;i<=1000;i++) { ji[i]=ji[i-1]*(long long)i%MOD; nij[i]=qpow(ji[i],MOD-2); } return; } } int main() { #ifdef LYT_LOCAL freopen("b.in","r",stdin); freopen("b.out","w",stdout); #endif solution::init(); int T; scanf("%d",&T); for(int i=1;i<=T;i++) solution::solve(); return 0; }