import queue N = int(input()) listB = [bin(i).count('1') for i in range(1,N+1)] #移動可能距離リスト StepList = [-1] * N #到達ステップ格納リスト初期化 VisitList = [False] * N #訪問済みか QuePosition = queue.Queue() #訪問予定キュー QueStep = queue.Queue() #ステップ記録 QuePosition.put(0) QueStep.put(1) VisitList[0] = True StepList[0] = 1 while QuePosition.empty() == False: VisitPosition = QuePosition.get() #訪問 VisitStep = QueStep.get() + 1 forward = VisitPosition + listB[VisitPosition] if forward < N: if VisitList[forward] == False: QuePosition.put(forward) QueStep.put(VisitStep) VisitList[forward] = True StepList[forward] = VisitStep back = VisitPosition - listB[VisitPosition] if back >= 0: if VisitList[back] == False: QuePosition.put(back) QueStep.put(VisitStep) VisitList[back] = True StepList[back] = VisitStep print(StepList[N-1])