#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int countBit(int a) { int cnt = 0; while(a > 0){ if(a & 1) ++ cnt; a >>= 1; } return cnt; } int main() { int n; cin >> n; vector dp(n+1, INT_MAX); queue q; dp[1] = 1; q.push(1); while(!q.empty()){ int a = q.front(); q.pop(); int x = countBit(a); if(a - x >= 1 && dp[a-x] == INT_MAX){ dp[a-x] = dp[a] + 1; q.push(a-x); } if(a + x <= n && dp[a+x] == INT_MAX){ dp[a+x] = dp[a] + 1; q.push(a+x); } } if(dp[n] < INT_MAX) cout << dp[n] << endl; else cout << -1 << endl; return 0; }