if __name__ == '__main__': count = 0 N = int(input()) is_visited = [False for i in range(N+1)] is_reached = False # 根ノードをqueに加え,訪問済みにする que = [1] is_visited[1] = True while len(que) != 0: is_deadend = True node_now = que.pop(0) is_visited[node_now] = True count += 1 if node_now == N: is_reached = True break else: step = bin(node_now).count("1") if node_now + step <= N and is_visited[node_now + step] is False: que.append(node_now + step) is_deadend = False if node_now - step >= 1 and is_visited[node_now - step] is False: que.append(node_now - step) is_deadend = False if is_deadend: count -= 1 if is_reached: print(count) else: print(-1)