using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); public static void Main() { IsPrime = new bool[1_000_000]; for (var i = 2; i < IsPrime.Length; ++i) IsPrime[i] = true; for (var i = 2; i < IsPrime.Length; ++i) { if (IsPrime[i]) { for (var j = i * 2; j < IsPrime.Length; j += i) IsPrime[j] = false; } } var k = NN; if (k == 0) { WriteLine(1); WriteLine(1); return; } var ans = Calc(k); WriteLine(ans.Count); WriteLine(string.Join(" ", ans)); } static bool[] IsPrime; static List Calc(int k) { var r = new Random(); var ans = new List(); var even = new HashSet(); var odd = new HashSet(); var rest = k; while (rest > 0) { var (e, o, ec, oc) = AddPair(r, rest, even, odd); for (var i = 0; i < ec; ++i) ans.Add(e); for (var i = 0; i < oc; ++i) ans.Add(o); even.Add(e); odd.Add(o); rest -= ec * oc; } return ans; } static (int e, int o, int ec, int oc) AddPair(Random r, int rest, HashSet even, HashSet odd) { var count = 0; var ec = 0; var oc = 0; for (var i = 1; ; ++i) { if ((i == 1 && rest < 3) || (i - 1) * (i - 1) < rest && i * i >= rest) { count = i; break; } } ec = count; oc = count; for (var d = 0; d < count; ++d) { if (count * count - d * d <= rest) { ec = count + d; oc = count - d; break; } } while (true) { var e1 = r.Next(1000, 200000) * 2; var o1 = r.Next(1000, 200000) * 2 + 1; if (IsPrime[e1 + o1]) { var flg = true; foreach (var e in even) if (!IsPrime[e + o1]) flg = false; foreach (var o in odd) if (!IsPrime[o + e1]) flg = false; if (flg) return (e1, o1, ec, oc); } } } }