def bc(x): x = x - ((x >> 1) & 0x5555555555555555) x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333) x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0f x = x + (x >> 8) x = x + (x >> 16) x = x + (x >> 32) return x & 0x0000007f N = int(input()) INF = float('inf') dp = [INF]*(N+1) dp[1] = 1 for i in range(1, N+1): c = bc(i) if i+c <= N: dp[i+c] = min(dp[i+c], dp[i]+1) if i-c >= 1: dp[i-c] = min(dp[i-c], dp[i]+1) for i in range(1, N+1): c = bc(i) if i+c <= N: dp[i+c] = min(dp[i+c], dp[i]+1) if i-c >= 1: dp[i-c] = min(dp[i-c], dp[i]+1) print(dp[N] if dp[N] < INF else -1)