#include #include using namespace std; #define INF 1e9 + 7 int bitCount(int b){ b = (b & 0x55555555) + (b >> 1 & 0x55555555); b = (b & 0x33333333) + (b >> 2 & 0x33333333); b = (b & 0x0f0f0f0f) + (b >> 4 & 0x0f0f0f0f); b = (b & 0x00ff00ff) + (b >> 8 & 0x00ff00ff); return (b & 0x0000ffff) + (b >> 16); } int main(){ int n; cin >> n; int dp[n + 1]; fill(dp,dp + n + 1,INF); dp[1] = 1; queue q; q.push(1); while(!q.empty()){ int now = q.front(),move = bitCount(now); q.pop(); for(int i = -move;i <= move;i += move * 2){ int next = now + i; if(next < 1 || next > n || dp[next] != INF) continue; dp[next] = dp[now] + 1; q.push(next); } } cout << (dp[n] != INF ? dp[n] : -1) << endl; }