from collections import deque n = int(input()) visited = [False] * (n + 1) visited[:1] = [True, True] cost = [-1] * (n + 1) cost[1] = 1 que = deque([1]) while que: v = que.pop() m = bin(v).count("1") if v - m >= 1: if not visited[v - m]: visited[v - m] = True cost[v - m] = cost[v] + 1 que.appendleft(v - m) if v + m <= n: if not visited[v + m]: visited[v + m] = True cost[v + m] = cost[v] + 1 que.appendleft(v + m) print(cost[n])