from inspect import currentframe def chkprint(*args): names = {id(v):k for k,v in currentframe().f_back.f_locals.items()} print(', '.join(names.get(id(arg),'???')+' = '+repr(arg) for arg in args)) def main(): # 総マス数 N = int(input()) queue = [1] move = 1 pre_reached_len = -1 reached = [] while len(queue) != 0: new_queue = [] # chkprint(move) for cell in queue: reached.append(cell) if cell == N: print(move) return n_one_bit = '{:b}'.format(cell).count('1') if cell + n_one_bit <= N: forward = cell + n_one_bit else: forward = -1 if cell - n_one_bit >= 1: backward = cell - n_one_bit else: backward = -1 if forward != 1 and forward not in reached and forward not in new_queue: new_queue.append(forward) if backward != -1 and backward not in reached and backward not in new_queue: new_queue.append(backward) move += 1 queue = new_queue # chkprint(new_queue) print(-1) return main()