MOD = int(1e9 + 7) fac = [1] ifac = [1] for i in range(1, int(2e6) + 10): fac.append((fac[-1] * i) % MOD) ifac.append((ifac[-1] * pow(i, MOD - 2, MOD)) % MOD) def C(n: int, k: int) -> int: if n < 0 or k < 0 or n < k: return 0 return ((fac[n] * ifac[k]) % MOD * ifac[n - k]) % MOD def P(n: int, k: int) -> int: if n < 0 or k < 0 or n < k: return 0 return (fac[n] * ifac[n - k]) % MOD def H(n: int, k: int) -> int: """itertools.combinations_with_replacement""" if n == 0: return 1 if k == 0 else 0 return C(n + k - 1, k) if __name__ == "__main__": import sys sys.setrecursionlimit(int(1e9)) input = lambda: sys.stdin.readline().rstrip("\r\n") T = int(input()) for _ in range(T): s = input() op = s[0] inner = s[2:-1] n, k = map(int, inner.split(",")) if op == "C": print(C(n, k)) elif op == "P": print(P(n, k)) elif op == "H": print(H(n, k))