namespace AtCoder; #nullable enable using System.Numerics; static class Extensions { public static T[] Repeat(this int time, Func F) => Enumerable.Range(0, time).Select(_ => F()).ToArray(); } class AtCoder { object? Solve() { var n = Int(); var mz = new long[n + 2]; mz[0] = 1; for (var i = 1; i <= n + 1; i++) mz[i] = mz[i - 1] * 2; for (var i = 0; i <= n + 1; i++) mz[i]--; var dz = new List(); var y = mz[n + 1]; for (var i = 2L; i * i <= y; i++) { while (y % i == 0) { dz.Add(i); y /= i; } } if (y > 1) dz.Add(y); for (var i = 2; i <= n; i++) { var m = mz[i]; var ez = new List(); foreach (var d in dz) { if (m % d == 0) { m /= d; } else { ez.Add(d); } } dz = ez; } return dz.Count == 0; } public static void Main() => new AtCoder().Run(); public void Run() { var res = Solve(); if (res != null) { if (res is bool yes) res = yes ? "Yes" : "No"; sw.WriteLine(res); } sw.Flush(); } string[] input = Array.Empty(); int iter = 0; readonly StreamWriter sw = new(Console.OpenStandardOutput()) { AutoFlush = false }; string String() { while (iter >= input.Length) (input, iter) = (Console.ReadLine()!.Split(' '), 0); return input[iter++]; } T Input() where T : IParsable => T.Parse(String(), null); int Int() => Input(); void Out(object? x, string? separator = null) { separator ??= Environment.NewLine; if (x is System.Collections.IEnumerable obj and not string) { var firstLine = true; foreach (var item in obj) { if (!firstLine) sw.Write(separator); firstLine = false; sw.Write(item); } } else sw.Write(x); sw.WriteLine(); } }