#include using namespace std; typedef long long int64; const int INF = 1 << 30; int main(){ int N; cin >> N; queue< int > que; que.push(1); vector< int > min_cost(N + 1, INF); min_cost[1] = 1; while(!que.empty()){ int p = que.front(); que.pop(); int next = __builtin_popcount(p); if(p + next <= N && min_cost[p + next] > min_cost[p] + 1){ que.push(p + next); min_cost[p + next] = min_cost[p] + 1; } if(p - next >= 1 && min_cost[p - next] > min_cost[p] + 1){ que.push(p - next); min_cost[p - next] = min_cost[p] + 1; } } if(min_cost[N] == INF) cout << -1 << endl; else cout << min_cost[N] << endl; }