#include #define be(v) (v).begin(),(v).end() #define pb(q) push_back(q) #define era(t) t.erase(unique(be(t)),t.end()) #define doublecout(a) cout<inline T lcm(T a,T b){return (a*b/__gcd(a,b));} queue > q; vector > v; int ans=1e9; int n; void solve(pair p){ int maki=p.first; int num=0; v[p.first]=make_pair(true,p.second); if(p.first==n){ ans=min(ans,p.second); return; } while(maki){ if(maki%2==1){ num++; } maki/=2; } int pm=p.first-num; int pp=p.first+num; p.second++; if(ans>p.second&&pm>0&&!(v[pm].first==true&&v[pm].second<=p.second)){ q.push(make_pair(pm,p.second)); } if(ans>p.second&&pp<=n&&!(v[pp].first==true&&v[pp].second<=p.second)){ q.push(make_pair(pp,p.second)); } return; } int main() { cin.tie(0); ios::sync_with_stdio(false); cin>>n; if(n==1){ cout<<1<