using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.Numerics; class MyClass { public static long dist(long x, int num) { var ret = 0L; for (int i = 0; i < num; i++) { ret += x >> i; } return ret; } public static void Solve() { var d = long.Parse(Console.ReadLine()); var set = new HashSet(); for (int num = 1; num <= 64; num++) { var l = d / 2; var r = d + 1; while (r - l > 1) { var mid = (l + r) / 2; var v = dist(mid, num); if (v <= d) { l = mid; } else { r = mid; } } if (dist(l, num) == d) { set.Add(l); } } Console.WriteLine(set.Min()); } public static void Main() { var sw = new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }; Console.SetOut(sw); Solve(); Console.Out.Flush(); } }