#include #include using namespace std; int count(int n) { int t = 0; while (n > 0) { if (n & 1) t++; n >>= 1; } return t; } int dist[10005]; int main() { int n; queue q; cin >> n; for (int i = 1; i <= n; i++) { dist[i] = -1; } dist[1] = 1; q.push(1); while (!q.empty()) { int p = q.front(); q.pop(); if (p - count(p) > 0) { if (dist[p - count(p)] == -1) { q.push(p - count(p)); dist[p - count(p)] = dist[p] + 1; } } if (p + count(p) <= n) { if (dist[p + count(p)] == -1) { q.push(p + count(p)); dist[p + count(p)] = dist[p] + 1; } } if (dist[n] != -1) break; } cout << dist[n] << endl; return 0; }