from collections import deque def main(): """ main """ N = int(input()) dp = set() dp.add(1) q = deque([(1, 1)]) # queueが空になるまでloopを回し、到達すればbreak and return while q: pos, cnt = q.popleft() if pos == N: print(cnt) break step = bin(pos).count('1') if 1 < (pos - step) and pos-step not in dp: dp.add(pos-step) q.append((pos-step, cnt+1)) if (pos + step) <= N and pos + step not in dp: dp.add(pos+step) q.append((pos+step, cnt+1)) else: print(-1) main()