import math def factorize(n): factors = {} while n % 2 == 0: factors[2] = factors.get(2, 0) + 1 n = n // 2 i = 3 max_i = math.isqrt(n) + 1 while i <= max_i and n > 1: while n % i == 0: factors[i] = factors.get(i, 0) + 1 n = n // i max_i = math.isqrt(n) + 1 i += 2 if n > 1: factors[n] = 1 return factors def generate_divisors(factors): divisors = [1] for prime in sorted(factors.keys()): exp = factors[prime] current_powers = [prime**i for i in range(exp + 1)] temp = [] for d in divisors: for power in current_powers: temp.append(d * power) divisors = temp return divisors def main(): P, Q = map(int, input().split()) q_factors = factorize(Q) q_squared_factors = {p: 2 * e for p, e in q_factors.items()} divisors = generate_divisors(q_squared_factors) answers = [] q_squared = Q * Q for d in divisors: e = q_squared // d if (d + Q) % P != 0 or (e + Q) % P != 0: continue x = (d + Q) // P y = (e + Q) // P if x > 0 and y > 0: answers.append((x, y)) answers.sort() print(len(answers)) for pair in answers: print(pair[0], pair[1]) if __name__ == "__main__": main()