#include using namespace std; int main() { int N; cin >> N; vector> G(N + 1); for (unsigned i = 1; i <= N; i++) { if (i + popcount(i) <= N) { G[i].push_back(i + popcount(i)); } if (i - popcount(i) >= 1) { G[i].push_back(i - popcount(i)); } } vector dis(N + 1, -1); queue q; dis[1] = 1; q.push(1); while (!q.empty()) { int v = q.front(); q.pop(); for (int nv: G[v]) { if (dis[nv] == -1) { dis[nv] = dis[v] + 1; q.push(nv); } } } cout << dis[N] << endl; return 0; }