from math import isqrt def isOK(mid, key): q = key // mid if q > mid: return True else: return False def bi_search(key): ok = -1 ng = 10 ** 18 while abs(ok - ng) > 1: mid = (ok + ng) // 2 if isOK(mid, key): ok = mid else: ng = mid return ok N = int(input()) C = 0 ans = [] s = 0 for l in range(1, 10 ** 6 + 1): p = l ** 3 if p > N: break elif p == N: C += 1 ans.append((l, l)) break else: s += l - 1 x = N + s ** 2 x_sqrt = isqrt(x) if x == x_sqrt ** 2: r = bi_search(2 * x_sqrt) if r * (r + 1) == 2 * x_sqrt: C += 1 ans.append((l, r)) print(C) ans.sort() for a in ans: print(*a)