import re from scipy import integrate from operator import itemgetter from collections import defaultdict as dd from collections import Counter from collections import deque import numpy as np import fractions import itertools import math from copy import deepcopy as dcopy import heapq from heapq import heappop, heappush, heapify N = int(input()) # N = 5 stack = [] heappush(stack, (1, 0, [True]+[False]*(N-1), "1")) # count, position, arrived, root flag = False while len(stack) != 0: count, position, arrived, root = heappop(stack) number = position + 1 if number == N: print(count) flag = True break move_size = bin(number).count("1") for move in (move_size, - move_size): new_position = position + move new_count = count + 1 new_arrived = dcopy(arrived) new_root = root + str(new_position + 1) if not (0 <= new_position <= N-1): pass elif new_arrived[new_position]: pass else: new_arrived[new_position] = True # print(new_root) heappush(stack, (new_count, new_position, new_arrived, new_root)) if not flag: print(-1)