using System; using System.Collections.Generic; using System.Linq; class Program { static int CountBit(int n) { var cnt = 0; for (var i = 0; n > 0; i++) { if (n % 2 == 1) cnt++; n /= 2; } return cnt; } static void Main() { const int inf = 1145141919; var n = int.Parse(Console.ReadLine()); var d = new int[n + 1].Select(x => inf).ToArray(); var que = new Queue(); que.Enqueue(1); d[1] = 1; while (que.Count > 0) { var p = que.Dequeue(); if (p == n) break; for (var i = 0; i < 2; i++) { var np = i == 0 ? p + CountBit(p) : p - CountBit(p); if (1 <= np && np <= n && d[np] == inf) { que.Enqueue(np); d[np] = d[p] + 1; } } } Console.WriteLine(d[n] == inf ? -1 : d[n]); return; } }