import sys MOD = 10**9 + 7 def main(): input = sys.stdin.read().split() T = int(input[0]) queries = input[1:T+1] MAX = 2 * 10**6 # Precompute factorial and inverse factorial modulo MOD up to MAX fact = [1] * (MAX + 1) for i in range(1, MAX + 1): fact[i] = fact[i-1] * i % MOD inv_fact = [1] * (MAX + 1) inv_fact[MAX] = pow(fact[MAX], MOD-2, MOD) for i in range(MAX - 1, -1, -1): inv_fact[i] = inv_fact[i+1] * (i + 1) % MOD results = [] for s in queries: func = s[0] rest = s[2:-1].split(',') n = int(rest[0]) k = int(rest[1]) if func == 'C': if k < 0 or n < k: results.append(0) else: if k == 0: results.append(1) else: res = fact[n] * inv_fact[k] % MOD res = res * inv_fact[n - k] % MOD results.append(res) elif func == 'P': if k < 0 or n < k: results.append(0) else: res = fact[n] * inv_fact[n - k] % MOD results.append(res) elif func == 'H': if n == 0: results.append(1 if k == 0 else 0) else: m = n + k - 1 if k < 0 or m < k: results.append(0) else: if k == 0: results.append(1) else: if m > MAX: results.append(0) else: res = fact[m] * inv_fact[k] % MOD res = res * inv_fact[m - k] % MOD results.append(res) sys.stdout.write('\n'.join(map(str, results)) + '\n') if __name__ == '__main__': main()