import java.util.*; public class Main { public static long MOD = (long)Math.pow(10, 9) + 7; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); long[] kai = new long[2000001]; kai[0] = 1; for(int i = 1; i < 2000001; i++) { kai[i] = (kai[i - 1] * (long)i) % MOD; } for(int i = 0; i < t; i++) { String s = sc.next(); char c1 = s.charAt(0); String sub = s.substring(2, s.length() - 1); String[] num = sub.split(",", 0); long n1 = Long.parseLong(num[0]); long n2 = Long.parseLong(num[1]); long ans = 0; if(c1 == 'C') { if(n1 >= n2) { ans = kai[(int)n1]; ans = (ans * func(kai[(int)n2], MOD - 2)) % MOD; ans = (ans * func(kai[(int)n1 -(int) n2], MOD - 2)) % MOD; } } else if(c1 == 'P') { if(n1 >= n2) { ans = kai[(int)n1]; ans = (ans * func(kai[(int)n1 -(int) n2], MOD - 2)) % MOD; } } else { if(n1 >= 1) { ans = kai[(int)n1 + (int)n2 - 1]; ans = (ans * func(kai[(int)n2], MOD - 2)) % MOD; ans = (ans * func(kai[(int)n1 - 1], MOD - 2)) % MOD; } else { if(n2 == 0) { ans = 1; } else { ans = 0; } } } System.out.println(ans); } } public static long func(long a, long x) { if(x == 0) return 1; if(x % 2 == 0) { long t = func(a, x / 2); return (t * t) % MOD; } else { long t = func(a, x / 2); t = (t * t) % MOD; return (t * a) % MOD; } } }