#include #include #include #include using namespace std; int N; vector flag; int Bfs(int s) { queue q; q.push(s); int res = 0; while (!q.empty()) { ++res; queue q2; while (!q.empty()) { int v = q.front(); q.pop(); flag[v] = true; if (v == N) return res; int a = v, dv = 0; while (a > 0) { if (a % 2 == 1) ++dv; a /= 2; } if (v - dv > 0 && !flag[v - dv]) q2.push(v - dv); if (v + dv <= N && !flag[v + dv]) q2.push(v + dv); } q = q2; } return -1; } int main() { cin >> N; flag.resize(N + 1); cout << Bfs(1) << endl; }