#include #include const int N = 10000; const int INTFINITE = 2147483647; std::array f; int main() { int n; scanf("%d", &n); f.fill(INTFINITE); f[1] = 1; std::queue q; q.push(1); while (!q.empty() && f[n] == INTFINITE) { int x = q.front(); q.pop(); int b = __builtin_popcount(x); int l = x - b, r = x + b; if (l && f[l] == INTFINITE) f[l] = f[x] + 1, q.push(l); if (r <= n && f[r] == INTFINITE) f[r] = f[x] + 1, q.push(r); }; printf("%d\n", f[n] == INTFINITE ? -1 : f[n]); }