#include using namespace std; #define REP(i, n) for(int(i)=0;(i)<(n);++(i)) const int INF = 1<<29; int N; int dp[10010]; int main(){ cin >> N; REP(i,N+1) dp[i] = INF; dp[1] = 1; deque q; q.push_back(1); while(!q.empty()){ int i = q.front(); q.pop_front(); int c = __builtin_popcount(i); if(i-c > 0 && dp[i-c] > dp[i] + 1){ dp[i-c] = dp[i] + 1; q.push_back(i-c); } if(i+c <= N && dp[i+c] > dp[i] + 1){ dp[i+c] = dp[i] + 1; q.push_back(i+c); } } int result = dp[N]; if(result == INF) result = -1; cout << result << endl; }