#include #include using namespace std; struct dta{ int p,c; }; bool lck[10001]; int main(){ int n;cin>>n; queue nya; nya.push({1,1}); while(nya.size()){ dta c = nya.front();nya.pop(); if(c.p==n){ cout << c.c << endl; return 0; } if(0 <= c.p-__builtin_popcount(c.p) && !lck[c.p-__builtin_popcount(c.p)]){ lck[c.p-__builtin_popcount(c.p)] = true; nya.push({c.p-__builtin_popcount(c.p),c.c+1}); } if(c.p+__builtin_popcount(c.p) <= n && !lck[c.p+__builtin_popcount(c.p)]){ lck[c.p+__builtin_popcount(c.p)] = true; nya.push({c.p+__builtin_popcount(c.p),c.c+1}); } } cout << -1 << endl; }