def popcount(x): binQ = bin(x)[2:] return binQ.count("1") N = int(input()) INF=float('inf') visited = [INF] * (N+1) visited[1] = 1 nxt = [[False] * (N+1) for _ in range(N+1)] nxt[0][1] = True for i in range(N): for j in range(1, N+1): if not nxt[j]: continue cnt = popcount(j) if j + cnt <= N and visited[j+cnt] > visited[j] + 1: visited[j+cnt] = min(visited[j+cnt], visited[j] + 1) nxt[i+1][j+cnt] = True if 1 <= j - cnt and visited[j-cnt] > visited[j] - 1: visited[j-cnt] = min(visited[j-cnt], visited[j] + 1) nxt[i+1][j-cnt] = True if visited[N] == INF: print(-1) else: print(visited[N])