#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { int n; cin >> n; int memo[n+1]; for (int i = 0; i <= n; i++) memo[i] = 1e9; int step[n+1]; for (int i = 1; i <= n; i++) step[i] = __builtin_popcount(i); queue qu; qu.push(1); qu.push(1); while (!qu.empty()) { int v = qu.front(); qu.pop(); int p = qu.front(); qu.pop(); int np; np = p+step[p]; if (np > 0 && np <= n && memo[np] > v+1) { memo[np] = v+1; qu.push(v+1); qu.push(np); } np = p-step[p]; if (np > 0 && np <= n && memo[np] > v+1) { memo[np] = v+1; qu.push(v+1); qu.push(np); } } if (memo[n] == int(1e9)) { cout << -1 << endl; }else { cout << memo[n] << endl; } }