from collections import deque N = int(input()) # N=1 の場合はスタートがそのままゴール if N == 1: print(1) exit() # 訪問済み管理 visited = [False] * (N + 1) # キュー: (現在位置, 移動回数) queue = deque() queue.append((1, 1)) # スタート地点も回数に含める visited[1] = True while queue: pos, count = queue.popleft() # ゴールに到達した場合 if pos == N: print(count) break # 現在位置の1のビット数 step = bin(pos).count("1") # 前後に移動 for next_pos in (pos + step, pos - step): if 1 <= next_pos <= N and not visited[next_pos]: visited[next_pos] = True queue.append((next_pos, count + 1)) else: # ゴールに到達できなかった場合 print(-1)