using System; public class Program { public static void Main() { int N = int.Parse(Console.ReadLine()); var isUsed = new bool[N]; isUsed[0] = true; for (int i = 1; i < N; i++) { isUsed[i] = false; } int ans = 1; int current = 1; while (current != N) { int move = 0; for (int temp = current; temp > 0; temp /= 2) { move += temp % 2; } if (current + move <= N && !isUsed[current + move - 1]) { ++ans; isUsed[(current += move) - 1] = true; } else if (current - move < 0 || isUsed[current - move - 1]) { Console.WriteLine(-1); return; } else { ++ans; isUsed[(current -= move) - 1] = true; } } Console.WriteLine(ans); } }