#include<cstdio> #include<cstring> #define MOD 1000000007
char s[1010];
int a[26], tt[1010];
inlineintqpow(longlong a, int n)//快速幂 { longlong ans = 1; while (n) { if (n & 1) ans = ans * a % MOD; a = a * a % MOD; n >>= 1; } return int(ans); }
intmain(int argc, char* argv[]) { int t; scanf("%d", &t); tt[0] = 1; for (int i = 1; i < 1010; ++i) //预处理生成阶乘 tt[i] = (long long)i * tt[i - 1] % MOD; while (t--) { longlong ans = 0; int flag = 0; memset(a, 0, sizeof(a)); scanf("%s", s); for (int i = 0; s[i] != '\0'; ++i) ++a[s[i] - 'a']; for (int i = 0; i < 26; ++i) { if (a[i] % 2 != 0) { if (++flag > 1) break; //如果出现两个或两个以上单数个字符个数就直接输出0 } ans += a[i] >> 1; //把每个字符出现的次数除以2,也就是考虑一半的情况
} if (flag < 2) { ans = tt[ans]; for (int i = 0; i < 26; ++i) if ((a[i]>>1) != 0) ans = ans * qpow(tt[a[i]>>1], MOD - 2) % MOD; //费马小定理 printf("%d\n", int(ans)); } else puts("0"); //如果有两个或两个以上奇数个字母则结果为0 } return 0; }