#include using namespace std; const int INF = numeric_limits::max(); int bitcnt(int num) { int c = 0; while (num > 0) { if (num % 2 == 1) { c++; } num /= 2; } return c; } int main() { int n; cin >> n; queue q; q.push(1); vector dist(n + 1, INF); dist[1] = 1; while (!q.empty()) { int now = q.front(); q.pop(); int bit = bitcnt(now); if (now - bit > 0 && dist[now - bit] == INF) { dist[now - bit] = dist[now] + 1; q.emplace(now - bit); } if (now + bit <= n && dist[now + bit] == INF) { dist[now + bit] = dist[now] + 1; q.emplace(now + bit); } } cout << (dist[n] < INF ? dist[n] : -1) << endl; return 0; }