N = int(input()) dp = [0] * (N + 1) visited = [False] * (N + 1) stack = [[1, 1]] while stack: n, cost = stack.pop() dp[n] = cost visited[n] = True move = bin(n)[2:].count('1') if n + move <= N: if not visited[n + move]: stack.append([n + move, cost + 1]) if n - move > 0: if not visited[n - move]: stack.append([n - move, cost + 1]) print(dp[N] if dp[N] else - 1)