from collections import deque def stepcount(x): return bin(x).count("1") def next_positions(pos): step = stepcount(pos) return pos + step, pos - step def bfs(N): if N == 1: return 1 visited = [False] * (N + 1) queue = deque([(1, 1)]) visited[1] = True while queue: pos, dist = queue.popleft() if pos == N: return dist for nxt in next_positions(pos): if 1 <= nxt <= N and not visited[nxt]: visited[nxt] = True queue.append((nxt, dist + 1)) return -1 def main(): N = int(input()) print(bfs(N)) if __name__ == "__main__": main()