class Que: def __init__(self, li=[]): self.li = li def popleft(self): if not self.li: return -1 x = self.li[0] del self.li[0] return x def append(self, x): return self.li.append(x) def has_q(self): if self.li: return True else: return False N = int(input()) memory = [-1] * (N + 1) memory[1] = 1 q = Que([1]) while q.has_q(): i = q.popleft() ones = bin(i)[2:].count('1') forward = i + ones back = i - ones if 0 < forward <= N and memory[forward] == -1: memory[forward] = memory[i] + 1 q.append(forward) if 0 < back <= N and memory[back] == -1: memory[back] = memory[i] + 1 q.append(back) print(memory[N])