import re def memo(f): m = [] def memof(arg1,arg2): for i in range(len(m),arg1+1):m.append(f(i,arg2)) return f(arg1,arg2) if (arg1<0) else m[arg1] return memof Inv = memo(lambda m,mod: ((mod-mod/m)*Inv(mod%m,mod))%mod if m>1 else 1 if m>=0 else 0) Fact = memo(lambda m,mod: (m*Fact(m-1,mod))%mod if m>0 else 1 if m==0 else 0) Factr = memo(lambda m,mod: (Inv(m,mod)*Factr(m-1,mod))%mod if m>0 else 1 if m==0 else 0) def combination_len(n,r,mod): return Fact(n,mod)*Factr(r,mod)%mod*Factr(n-r,mod)%mod def repeated_combination_len(n,r,mod): return 1 if n==0 and r==0 else combination_len(n+r-1,r,mod) def permutation_len(n,r,mod): return Fact(n,mod)*Factr(n-r,mod)%mod m={"C":combination_len,"P":permutation_len,"H":repeated_combination_len} for _ in range(input()): a,b,c = filter(len,re.split("\(|\)|,",raw_input())) print(m[a](int(b),int(c),1000000007))