from collections import deque def countbinary(x): return bin(x).count("1") n = int(input()) a = 1 list2 = [] flag = [] q = deque([]) for num2 in range(0,n+1): list2.append(10000000) flag.append(False) list2[1] = 1 q.append(1) judge = True while judge: judge = False a = q.pop() num = int(countbinary(a)) flag[a] = True if a - num > 0 and (flag[a-num] is False): list2[a-num]=min(list2[a]+1,list2[a-num]) judge = True num3 = a - num q.append(num3) if a + num <= n and (flag[a+num] is False): list2[a+num]=min(list2[a] +1,list2[a+num]) num4 = a + num judge = True q.append(num4) if flag[n]: print(list2[n]) else: print(-1)