from itertools import accumulate def accum(a: list): acc = list(accumulate(a)) return lambda l, r: acc[r] - (acc[l-1] if l > 0 else 0) a = [pow(i, 3) for i in range(10**6+10)] acc = accum(a) N = int(input()) ans = [] for i in range(1, len(a)): if a[i] > N: break lo = i hi = len(a)-1 while lo <= hi: m = (lo + hi) // 2 x = acc(i, m) if x == N: ans.append((i, m)) break elif x > N: hi = m - 1 else: lo = m + 1 print(len(ans)) for l, r in ans: print(l, r)