def factorize(n): factors = {} while n % 2 == 0: factors[2] = factors.get(2, 0) + 1 n = n // 2 i = 3 while i * i <= n: while n % i == 0: factors[i] = factors.get(i, 0) + 1 n = n // i i += 2 if n > 1: factors[n] = 1 return factors def factorial_factors(r): factors = {} for i in range(2, r + 1): current = i temp = {} while current % 2 == 0: temp[2] = temp.get(2, 0) + 1 current = current // 2 j = 3 while j * j <= current: while current % j == 0: temp[j] = temp.get(j, 0) + 1 current = current // j j += 2 if current > 1: temp[current] = 1 for prime, exp in temp.items(): factors[prime] = factors.get(prime, 0) + exp return factors # Read input k = int(input()) prime_factors = {} for _ in range(k): p, e = map(int, input().split()) prime_factors[p] = e # Get the largest prime p if not prime_factors: print(-1, -1) exit() p_list = sorted(prime_factors.keys()) p = p_list[-1] # Check if p's exponent is 1 if prime_factors[p] != 1: print(-1, -1) exit() # Compute M's factors m_factors = prime_factors.copy() m_factors[p] -= 1 if m_factors[p] == 0: del m_factors[p] # Check for r from 2 to a reasonable upper limit found = False for r in range(2, 50): if p < r: continue # Skip if p < r since binomial(p, r) would be 0 # Calculate numerator factors: product of (p-1)(p-2)...(p-r+1) numerator_factors = {} valid_numerator = True for num in range(p-1, p - r, -1): if num <= 0: valid_numerator = False break factors = factorize(num) for prime, exp in factors.items(): numerator_factors[prime] = numerator_factors.get(prime, 0) + exp if not valid_numerator: continue # Calculate denominator factors: r! denominator_factors = factorial_factors(r) # Check if denominator factors are subset of numerator factors v_factors = numerator_factors.copy() valid = True for prime, exp in denominator_factors.items(): if v_factors.get(prime, 0) < exp: valid = False break v_factors[prime] -= exp if v_factors[prime] == 0: del v_factors[prime] if not valid: continue # Check if v_factors matches m_factors if v_factors == m_factors: print(p, r) found = True break if not found: # Check r=1 case (M must be empty) if not m_factors: print(p, 1) else: print(-1, -1)