# coding: utf-8 N = int(input()) def search_move(num): count = 0 for i in list(bin(num)): if i == "1": count += 1 return count if N == 1: print(1) quit() memo = [0] * (N + 1) def move(count=1, num=1): global memo if num == N: return count if num <= 0 or num > N: return -1 else: if memo[num] == 1: return -1 memo[num] = 1 move_num = search_move(num) return max(move(count + 1, num - move_num), move(count + 1, num + move_num)) print(move())