def count_1bit(num): if num == 1: return 1 elif num == 0: return 0 else: count = num % 2 return count + count_1bit(num // 2) (NOF_NODE) = int(input().rstrip()) # ノードリスト作成 # ノード=0:1ビット数、1:左初めて?、2:右初めて? nodes = [] for i in range(1, NOF_NODE+1): node = [count_1bit(i), True, True] nodes.append(node) # 先頭ノードは左に行けない nodes[0][1] = False # 経路探索 nof_pass = 1 current_node = 0 in_progress = True while in_progress: if current_node == NOF_NODE - 1: in_progress = False else: nof_node = nodes[current_node][0] if nodes[current_node][2] and (current_node + nof_node <= NOF_NODE - 1): nodes[current_node][2] = False nof_pass += 1 current_node += nof_node elif nodes[current_node][1] and (current_node - nof_node > 0): nodes[current_node][1] = False nof_pass += 1 current_node -= nof_node else: # たどり着けない nof_pass = -1 in_progress = False print(nof_pass)