## https://yukicoder.me/problems/no/3332 import math def solve_case_e1(N): sqrt_n = int(math.sqrt(2 * N)) divisors = [] for p in range(1, sqrt_n +1): if (2 * N) % p == 0: q = (2 * N) // p divisors.append(p) if q != p: divisors.append(q) answers = [] for p in divisors: q = (2 * N ) // p if (p + q - 1) % 2 == 0 and (q - p + 1) % 2 == 0: l = (q - p + 1) // 2 r = (p + q - 1) // 2 if 1 <= l and l <= r: answers.append((1, l, r)) return answers def solve_case_overe2(e, N): n = 1 array = [(0, 0)] while n ** e <= N: array.append((n, n ** e)) n += 1 cum_array = [] x = 0 for a, a_ in array: x += a_ cum_array.append((a, x)) a_map = {} answer = [] for l, l_e in reversed(cum_array): if l_e + N in a_map: r = a_map[l_e + N] answer.append((e, l + 1, r)) a_map[l_e] = l return answer def main(): N = int(input()) answer_list = [] # E = 1 のケース answer_list.extend(solve_case_e1(N)) # E = 2 以上のケース max_k = 1 while 2 ** max_k < N: max_k += 1 for e in range(2, max_k + 1): answer_list.extend(solve_case_overe2(e, N)) print(len(answer_list)) for e, l, r in answer_list: print(e, l, r) if __name__ == "__main__": main()