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) def solve(n: int, k: int): assert k > 1 a = [] i = 0 while True: x = pow(i, k) if x > n: break a.append(x) i += 1 acc = accum(a) 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((k, i, m)) break elif x > n: hi = m - 1 else: lo = m + 1 return ans N = int(input()) ans = [] for i in range(2, 41): if pow(2, i) > N: break res = solve(N, i) ans.extend(res) print(len(ans)) for k, l, r in ans: print(k, l, r)