#nullable enable var n = Int128.Parse(Console.ReadLine()!); var ans = new List<(Int128, Int128)>(); static Int128 F(Int128 l, Int128 d) { var r = l + d; var ru = r * (r + 1); var lu = l * (l + 1); return ru * ru - lu * lu; } var m = n * 4; var max = 200000; for (Int128 l = 1; l <= max; l++) { Int128 pass = 0; Int128 fail = int.MaxValue; while (fail - pass > 1) { var mid = (pass + fail) >> 1; if (F(l, mid) <= m) pass = mid; else fail = mid; } if (F(l, pass) == m) ans.Add((l + 1, l + pass)); } for (Int128 d = 1; d <= max; d++) { Int128 pass = 0; Int128 fail = int.MaxValue; while (fail - pass > 1) { var mid = (pass + fail) >> 1; if (F(mid, d) <= m) pass = mid; else fail = mid; } if (F(pass, d) == m) ans.Add((pass + 1, pass + d)); } 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)));