#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/1/ITP1_1_A" #include namespace zawa { template class mod_combinations { private: std::vector facs, inv_facs; public: mod_combinations(std::size_t n) : facs(2 * n + 1, 1LL), inv_facs(2 * n + 1) { for (std::size_t i = 0 ; i + 1 < facs.size() ; i++) { facs[i + 1] = facs[i] * (i + 1); facs[i + 1] %= mod; } long long base = facs.back(); long long inv = 1LL; long long p = mod - 2; while (p > 0) { if (p & 1) { inv *= base; inv %= mod; } base = (base * base) % mod; p >>= 1; } inv_facs.back() = inv; for (int i = (int)facs.size() - 1 ; i - 1 >= 0 ; i--) { inv_facs[i - 1] = inv_facs[i] * i; inv_facs[i - 1] %= mod; } } long long P(std::size_t n, std::size_t r) { if (r > n) { return 0LL; } return (facs[n] * inv_facs[(n - r)]) % mod; } long long C(std::size_t n, std::size_t r) { if (r > n) { return 0LL; } return (P(n, r) * inv_facs[r]) % mod; } long long H(std::size_t n, std::size_t r) { if (n == 0 and r == 0) { return 1LL; } if (r > n + r - 1) { return 0LL; } return C(n + r - 1, r); } long long F(std::size_t n) { return facs[n]; } long long invF(std::size_t n) { return inv_facs[n]; } }; } // namespace zawa #include int read() { int res = 0; while (1) { char d; std::cin >> d; if ('0' <= d and d <= '9') { res *= 10; res += (d - '0'); } else { break; } } return res; } int main() { zawa::mod_combinations<1000000007LL> mc(1000000); int t; std::cin >> t; for (int _ = 0 ; _ < t ; _++) { char c; std::cin >> c; char __; std::cin >> __; int n = read(); int r = read(); if (c == 'C') { std::cout << mc.C(n, r) << std::endl; } if (c == 'P') { std::cout << mc.P(n, r) << std::endl; } if (c == 'H') { std::cout << mc.H(n, r) << std::endl; } } std::cout << "Hello World" << std::endl; } /* * yukicoder No.117 組み合わせの数 * */