#define _USE_MATH_DEFINES #include #include #include #include #include //#include #include #include #include #include #include #include ///////// #define REP(i, x, n) for(int i = x; i < n; i++) #define rep(i,n) REP(i,0,n) #define P(p) cout<<(p)< ///////// typedef long long LL; typedef long double LD; ///////// using namespace::std; ///////// const LL mod = 7+(int)1e9; const int kmax = 1000001; LL kai[2*kmax]; LL invkai[2*kmax]; LL ans[100000]; LL powmod(int n,int p){ //a^p LL ans = 1; LL mel = n; while( p ){ if( p%2 ){ ans = (ans * mel)%mod; } p /= 2; mel = (mel * mel)%mod; } return ans; } LL ccc(int n,int k){ LL ans; if( n < k){ return 0; } ans = ( ( (kai[n]*invkai[n-k])%mod)*invkai[k] )%mod; //ans = (((kai[n]*powmod(kai[n-k],mod-2))%mod)*powmod(kai[k],mod-2))%mod; return ans; } void init(){ kai[0] = 1; invkai[0] = 1; for(int i=1;i<2*kmax;++i){ kai[i] = (i*kai[i-1])%mod; invkai[i] = powmod(kai[i],mod-2); } } LL ppp(int n,int k){ return (ccc(n,k)*kai[k])%mod; } LL hhh(int n,int k){ if(n==0 && k == 0){ return 1; } return ccc(n+k-1,k); } int main(void){ std::cin.tie(0); std::ios::sync_with_stdio(false); std::cout << std::fixed;// //cout << setprecision(16);// init(); int T,N,K; cin>>T; char f,a; rep(i,T){ cin>>f>>a>>N>>a>>K>>a; if(f=='C'){ ans[i] = ccc(N,K); }else if( f=='P'){ ans[i] = ppp(N,K); }else{ ans[i] = hhh(N,K); } } rep(i,T){ P(ans[i]); } return 0; }