using System; using System.Collections.Generic; class BitSugoroku { static void Main(string[] args) { int N = int.Parse(Console.ReadLine()); int[] steps = new int[N+1]; Queue queue = new Queue(); for(int i=0; i<=N; i++) { steps[i] = -1; } steps[1] = 1; queue.Enqueue(1); while(queue.Count != 0) { int t = queue.Dequeue(); int step = bitCount(t); if(t+step <= N && steps[t+step] == -1) { steps[t+step] = steps[t] + 1; queue.Enqueue(t+step); } if(t-step >= 1 && steps[t-step] == -1) { steps[t-step] = steps[t] + 1; queue.Enqueue(t-step); } } Console.WriteLine(steps[N]); } static int bitCount(int n) { int count=0; while(n > 0) { if((n & 0x01) == 0x01) count++; n >>= 1; } return count; } }