#include #include #include #include int main() { using namespace std; int n; cin >> n; constexpr int INF = 1e6; vector ans(n + 1, INF); ans[1] = 1; queue que; que.push(1); while (!que.empty()) { unsigned int v = que.front(); que.pop(); unsigned int b = popcount(v); if (b < v && ans[v - b] == INF) { ans[v - b] = ans[v] + 1; que.push(v - b); } if (v + b <= static_cast(n) && ans[v + b] == INF) { ans[v + b] = ans[v] + 1; que.push(v + b); } } cout << (ans[n] == INF ? -1 : ans[n]) << endl; }