import sys from itertools import accumulate from typing import List, Tuple import random int1 = lambda x: int(x) - 1 # input = lambda: sys.stdin.readline().rstrip('\n') ii = lambda: int(input()) vi = lambda: list(map(int, input().split())) vi1 = lambda: list(map(int1, input().split())) def dbg(*args, **kwargs): print(*(repr(arg) for arg in args), *(f'{k}: {repr(v)}' for k, v in kwargs.items()), sep='; ', file=sys.stderr, flush=True) def main(): n = ii() *s, = accumulate(i ** 3 for i in range(10 ** 6 + 2)) j = 0 ans = [] for i in range(len(s)): j = max(j, i + 1) while j < len(s) and s[j] - s[i] < n: j += 1 if j < len(s) and s[j] - s[i] == n: ans.append((i + 1, j)) print(len(ans)) for i, j in ans: print(i, j) def _start(): if (ret := main()) is not None: print(*ret) if isinstance(ret, List) or isinstance(ret, Tuple) else print(ret) if __name__ == '__main__': _start()