from collections import deque def main(): N = int(input()) if N == 1: print(1) return visited = [False] * (N + 1) queue = deque() queue.append((1, 1)) visited[1] = True found = False while queue: pos, steps = queue.popleft() if pos == N: print(steps) found = True break steps_num = bin(pos).count('1') next_pos1 = pos + steps_num next_pos2 = pos - steps_num for next_pos in [next_pos1, next_pos2]: if 1 <= next_pos <= N and not visited[next_pos]: visited[next_pos] = True queue.append((next_pos, steps + 1)) if not found: print(-1) if __name__ == "__main__": main()