from collections import deque N = int(input()) def bfs(): v = deque([False] * (N + 1)) q = deque() q.append([1,1]) count = 0 while(q): u = q.popleft() v[u[0]] = True bit1_count = '{:b}'.format(u[0]).count('1') v1 = u[0] + bit1_count v2 = u[0] - bit1_count if u[0] == N: return u[1] if (0 < v1 <= N) and not v[v1]: q.append([v1,u[1] + 1]) if (0 < v2 <= N) and not v[v2]: q.append([v2, u[1] + 1]) return -1 print(bfs())