def devisors(n): d = [] a = 1 while a * a < n: if n % a == 0: d.append(a) d.append(n // a) a += 1 if a * a == n: d.append(a) return d p, q = map(int, input().split()) ans = set() for d in devisors(q): n = d m = q // d x = m // p + 1 while x <= n * x // (p * x - m): if n * x % (p * x - m) == 0: ans.add((n * x, m * n * x // (p * x - m))) x += 1 y = n // p + 1 while y <= m * y // (p * y - n): if m * y % (p * y - n) == 0: ans.add((m * y, n * m * y // (p * y - n))) y += 1 ans = list(sorted(ans)) print(len(ans)) for n, m in ans: print(n, m)