N=int(input()) result=[] for d in range(1,10**7): if (d*(d+1)//2)>N: break l=1 r=N while True: if l==r: break m=(l+r)//2 s=d*((m+m+d-1))//2 if s>=N: r=m else: l=m+1 if d*((l+l+d-1))//2==N: result.append((1,l,l+d-1)) from bisect import bisect_right for E in range(2,50): h=[] c=0 for x in range(1,10**6+1): c+=x**E h.append(c) if x**E>N: break c=0 for x in range(1,10**6+1): y=c+N pos=bisect_right(h,y) if h[pos-1]==y: result.append((E,x,pos)) if x**E>N: break c+=x**E result.sort() print(len(result)) for i in range(len(result)): a,b,c=result[i][:] print(a,b,c)