#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; class Mod { static const int MOD = 1000000007; long long a; public: Mod(){ a = 0; } Mod(long long x){ a = (x % MOD + MOD) % MOD; } const Mod operator+(const Mod& x) const{ return Mod(a + x.a); } const Mod operator-(const Mod& x) const{ return Mod(a - x.a); } const Mod operator*(const Mod& x) const{ return Mod(a * x.a); } const Mod operator/(const Mod& x) const{ // フェルマーの小定理、MODが素数である場合のみ有効 int b = MOD - 2; long long c = x.a; long long ret = 1; while(b > 0){ if(b & 1){ ret *= c; ret %= MOD; } c *= c; c %= MOD; b >>= 1; } return Mod(a * ret); } long long getValue(){ return a; } }; int main() { vector f(2000001, 1); for(int i=2; i<=2000000; ++i) f[i] = f[i-1] * i; int t; cin >> t; while(--t >= 0){ char ope, c; int a, b; cin >> ope >> c >> a >> c >> b >> c; Mod ret = 0; if(ope == 'P'){ if(a >= b) ret = f[a] / f[a-b]; } else if(ope == 'C'){ if(a >= b) ret = f[a] / f[b] / f[a-b]; } else{ if(a == 0 && b == 0) ret = 1; else if(a > 0) ret = f[a+b-1] / f[b] / f[a-1]; } cout << ret.getValue() << endl; } return 0; }