#include #include #include using namespace std; int main() { int N; vector dist(11000, -1); cin >> N; dist[1] = 1; dist[2] = 2; queue q; q.push(2); while (q.size()) { int n = q.front(); q.pop(); int b = __builtin_popcount(n); if (n > N) continue; if (dist[n + b] == -1) { dist[n + b] = dist[n] + 1; q.push(n + b); } if (dist[n - b] == -1) { dist[n - b] = dist[n] + 1; q.push(n - b); } } cout << dist[N] << endl; }