#include using namespace std; using fint64 = int_fast64_t; struct Combination { const int MAX = 5000010; const int MOD; vector FAC; vector INV; vector FAC_INV; Combination(fint64 MOD) : MOD(MOD), FAC(vector(MAX)), INV(vector(MAX)), FAC_INV(vector(MAX)) { FAC[0] = INV[1] = FAC_INV[0] = 1; for(int i = 1; i < MAX; ++i) { FAC[i] = FAC[i - 1] * i % MOD; if(i > 1) INV[i] = MOD - INV[MOD % i] * (MOD / i) % MOD; FAC_INV[i] = FAC_INV[i - 1] * INV[i] % MOD; } } fint64 C(int n, int r) { if(n < 0 or r < 0 or n < r) return 0; return FAC[n] * FAC_INV[r] % MOD * FAC_INV[n - r] % MOD; } fint64 P(int n, int r) { if(n < 0 or r < 0 or n < r) return 0; return FAC[n] * FAC_INV[n - r] % MOD; } fint64 H(int n, int r) { if(r == 0) return 1; return C(n + r - 1, r); } }; int main() { const int MOD=1e9 + 7; Combination com(MOD); int t; cin >> t; while(t--) { string s; cin >> s; int n, k, tmp = 0; for(int i = 2; i < (int)s.size(); ++i) { if(s[i] == ')') { k = tmp; } else if(s[i] == ',') { n = tmp; tmp = 0; } else { tmp *= 10; tmp += s[i] - '0'; } } if(s[0] == 'C') cout << com.C(n, k) << '\n'; if(s[0] == 'P') cout << com.P(n, k) << '\n'; if(s[0] == 'H') cout << com.H(n, k) << '\n'; } return 0; }