#include #include int c[511][511]; long long MOD = 1e9+7; void C() { for (int i=0;i<=500;i++) c[i][0]=1; for (int i=1;i<=500;i++) { for (int j=1;j<=i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j]) % MOD; } } int main() { int u; char a[1111]; int num[27]; int l; C(); scanf ("%d",&u); while (u--) { scanf ("%s",a); memset(num,0,sizeof (num)); l = strlen (a); for (int i = 0 ; i < l ; i++) num[a[i]-'a'+1]++; int odd = 0; for (int i = 1 ; i <= 26 ; i++) { if (num[i] & 1) { odd++; num[i] = 0; } else num[i] /= 2; } if (odd > 1 || (odd == 1 && (l & 1) == 0)) //特判一下 { printf ("0\n"); continue; } l /= 2; long long ans = 1; for (int i = 1 ; i <= 26 ; i++) { ans = (ans * c[l][num[i]]) % MOD; l -= num[i]; } printf ("%I64d\n",ans); } return 0; }