#include #include using namespace std; int dp[100001]; int main() { int N; cin >> N; dp[1] = 1; queue que; que.push(1); while(!que.empty()) { int cur = que.front(); que.pop(); int move = __builtin_popcount(cur); if(cur + move <= N && dp[cur + move] == 0) { dp[cur + move] = dp[cur] + 1; que.push(cur + move); } if(cur - move >= 1 && dp[cur - move] == 0) { dp[cur - move] = dp[cur] + 1; que.push(cur - move); } } cout << (dp[N] ?: -1) << endl; }