import bisect N=int(input()) if N == 1: print(1) print(1, 1) exit() mem=[1] ans=[] for i in range(2, 10**6+1): mem.append(mem[-1]+i*i*i) if mem[-1] == N: ans.append([1, i]) idx = bisect.bisect_left(mem, mem[-1]-N) if idx < len(mem) and mem[idx] == mem[-1]-N: ans.append([idx+2, i]) ans=sorted(ans) print(len(ans)) for L, R in ans: print(L, R)