#include #include #include #include #include #include #include #include #include #include #define PI acos(-1.0) #define CLR(a, b) memset(a, (b), sizeof(a)) #define fi first #define se second #define ll o<<1 #define rr o<<1|1 using namespace std; typedef long long LL; typedef pair pii; const int MAXN = 4*1e3+10; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; void add(LL &x, LL y) { x += y; x %= MOD; } int cnt[30], rec[30]; LL C[1001][1001]; void getC() { for(int i = 0; i <= 1000; i++) C[i][0] = 1; for(int i = 1; i <= 1000; i++) for(int j = 1; j <= i; j++) C[i][j] = (C[i-1][j] + C[i-1][j-1]) % MOD; } LL Solve(int num, int len) { LL ans = 0; for(int i = 1; i <= len; i++) { if(len - i < num - 1) break; add(ans, C[len-i][num-1]); } return ans; } char str[1001]; int main() { getC(); int t; scanf("%d", &t); while(t--) { scanf("%s", str); int len = strlen(str); CLR(cnt, 0); for(int i = 0; i < len; i++) { cnt[str[i]-'a']++; } bool flag = true; if(len % 2 == 0) { for(int i = 0; i < 26; i++) { if(cnt[i] & 1) { flag = false; break; } } } else { int num = 0; for(int i = 0; i < 26; i++) { if(cnt[i] & 1) { num++; } } if(num != 1) { flag = false; } } if(!flag) { printf("0\n"); continue; } int m = 0; for(int i = 0; i < 26; i++) { cnt[i] /= 2; if(cnt[i]) { rec[m++] = cnt[i]; } } len /= 2; LL ans = 1LL; for(int i = 0; i < m-1; i++) { ans = ans * Solve(rec[i], len) % MOD; len -= rec[i]; } cout << ans << endl; } return 0; }