using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; namespace PProgram { class Program { static void Main(string[] args) { int Masu = int.Parse(Console.ReadLine()); var myQ = new Queue(); bool[] Tansakuzumi = Enumerable.Repeat(false,Masu + 1).ToArray(); int[] KaisuKiroku = Enumerable.Repeat(0, Masu + 1).ToArray(); myQ.Enqueue(1); KaisuKiroku[1] = 1; while(myQ.Count != 0) { var target = (int)myQ.Dequeue(); int idoukyori = BitCount(target); int NextIndex = target + idoukyori; if( 1 <= NextIndex && NextIndex <= Masu) { if(!Tansakuzumi[NextIndex]) { myQ.Enqueue(NextIndex); Tansakuzumi[NextIndex] = true; KaisuKiroku[NextIndex] = KaisuKiroku[target] + 1; } } NextIndex = target - idoukyori; if(1 <= NextIndex && NextIndex <= Masu) { if(!Tansakuzumi[NextIndex]) { myQ.Enqueue(NextIndex); Tansakuzumi[NextIndex] = true; KaisuKiroku[NextIndex] = KaisuKiroku[target] + 1; } } } if (KaisuKiroku[Masu] == 0) { Console.WriteLine(-1); } else { Console.WriteLine(KaisuKiroku[Masu]); } } private static int BitCount (int number) { int bitCount = 0; for(int i = 0; number > 0; i++) { int onezero = number % 2; if(onezero == 1) { bitCount++; } number = number / 2; } return bitCount; } } }