N = int(input()) C = 0 ans = [] for X in range(1, 2 * 10**6): Y = 2 * N // X if X * Y == 2 * N: if (X - Y + 1) % 2 == 0 and (X + Y - 1) % 2 == 0: L = (X - Y + 1) // 2 R = (X + Y - 1) // 2 if 0 < L <= R and R > 0: C += 1 ans.append((1, L, R)) pow_list = [[j for j in range(10 ** 6 + 5)] for i in range(41)] for e in range(2, 40): d = {0: 0} rev = {0: 0} tmp = 0 for i in range(1, 10 ** 6 + 1): po = pow_list[e-1][i] * i pow_list[e][i] = po if po > N: break p = d[i-1] + po d[i] = p rev[p] = i tmp = i for l in range(1, tmp + 1): x = N + d[l-1] if x in rev: C += 1 ans.append((e, l, rev[x])) print(C) ans.sort() for a in ans: print(*a)