#include #include using namespace std; int main(){ int n; cin >> n; vector dist(n+1, INT_MAX); queue que; que.emplace(1); dist[1] = 1; while(que.size()){ int cv = que.front(); que.pop(); int cbit = __builtin_popcount(cv); int nv = cv - cbit; if(1 <= nv && dist[cv] + 1 < dist[nv]){ dist[nv] = dist[cv] + 1; que.emplace(nv); } nv = cv + cbit; if(nv <= n && dist[cv] + 1 < dist[nv]){ dist[nv] = dist[cv] + 1; que.emplace(nv); } } cout << (dist[n] == INT_MAX ? -1 : dist[n]) << endl; }