MOD = 10**9 + 7 def is_greater_or_equal(a_str, b_str): if len(a_str) > len(b_str): return True elif len(a_str) < len(b_str): return False else: return a_str >= b_str def mod_str(s, mod): res = 0 for c in s: res = (res * 10 + int(c)) % mod return res T = int(input()) for _ in range(T): C, P = input().split() # Check if P >= MOD mod_str_p = str(MOD) if len(P) > len(mod_str_p) or (len(P) == len(mod_str_p) and P >= mod_str_p): print(0) continue p_val = int(P) # Check if C >= P if not is_greater_or_equal(C, P): print(0) continue # Check if C >= 2*p_val - 1 two_p_minus_1 = 2 * p_val - 1 two_p_str = str(two_p_minus_1) if not is_greater_or_equal(C, two_p_str): print(0) continue # Calculate n_mod = (C mod MOD - p_val + 1) mod MOD c_mod = mod_str(C, MOD) n_mod = (c_mod - p_val + 1) % MOD if n_mod < 0: n_mod += MOD if n_mod < p_val: print(0) else: product = 1 for i in range(p_val): term = (n_mod - i) % MOD product = (product * term) % MOD print(product)