#nullable enable var n = long.Parse(Console.ReadLine()!); var ans = new List<(int, long, long)>(); for (var d = 1L; d <= 200000; d++) { var ld2 = n * 2 - d * d - d; if (ld2 < 0 || ld2 % (d * 2) != 0) continue; var l = ld2 / (d * 2); ans.Add((1, l + 1, l + d)); } long SafePower(long x, int p) { var lowerThan = n + 1; var res = 1L; while (p > 0) { if ((p & 1) > 0) { if (res >= lowerThan / x) return -1; res *= x; if (p == 1) return res; } if (x >= lowerThan / x) return -1; x *= x; p >>= 1; } return res; } for (var e = 2; e <= 40; e++) { var dictionary = new Dictionary() { [0] = 0 }; var r = 1L; var last = 0L; while (true) { var re = SafePower(r, e); if (re < 0) break; last += re; if (dictionary.TryGetValue(last - n, out var l)) ans.Add((e, l + 1, r)); dictionary[last] = r; r++; } } ans = ans.Distinct().ToList(); ans.Sort(); Console.WriteLine(ans.Count); if (ans.Count > 0) Console.WriteLine(string.Join(Environment.NewLine, ans.Select(e => e.Item1 + " " + e.Item2 + " " + e.Item3)));