#include #include #include #define FOR(i,a,b) for(int i=(a);i<(b);++i) using namespace std; typedef long long ll; const ll M = pow(10,9)+7; vector fac(1000001); //n!(mod M) vector ifac(1000001); //k!^{M-2} (mod M) ll mpow(ll x, ll n){ //x^n(mod M) ll ans = 1; while(n != 0){ if(n&1) ans = ans*x % M; x = x*x % M; n = n >> 1; } return ans; } ll comb(ll a, ll b){ //aCb(mod M) if(a == 0 && b == 0)return 1; if(a < b || a < 0)return 0; ll tmp = ifac[a-b]* ifac[b] % M; return tmp * fac[a] % M; } ll perm(ll a, ll b){ if(a < b) return 0; ll tmp = ifac[a-b] % M; return tmp * fac[a] % M; } ll dupc(ll a,ll b){ if(a == 0 && b == 0)return 1; if(a < 0 || b == 0)return 0; ll tmp = ifac[a-1]* ifac[b] % M; return tmp * fac[a+b-1] % M; } int main() { ll t; cin >> t; vector c(t); vector a(t),b(t); FOR(i, 0, t){ scanf(" %c(%d,%d)",&c[i] ,&a[i] ,&b[i]); } fac[0] = 1; ifac[0] = 1; for(ll i = 0; i<1000000; i++){ fac[i+1] = fac[i]*(i+1) % M; // n!(mod M) ifac[i+1] = ifac[i]*mpow(i+1, M-2) % M; // k!^{M-2} (mod M) } FOR(i, 0, t){ ll ans=0; if(c[i] == 'P')ans = perm(a[i],b[i]); if(c[i] == 'C')ans = comb(a[i],b[i]); if(c[i] == 'H')ans = dupc(a[i],b[i]); cout << ans << endl; } return 0; }