#include using namespace std; int main(){ int n;cin>>n; //dist[i]=移動手数 //現段階で行けないときは-1 vector dist(n+1,-1); dist[1]=1; queue que; que.push(1); while(!que.empty()){ int u=que.front();que.pop(); //ここからは遷移 //bit.count()=bitの桁が1になっている数==__builtinpop.count //uから1手で行けるのはu+bit.count()かu-bit.count() if(u+__builtin_popcount(u)<=n&&dist[u+__builtin_popcount(u)]==-1){ dist[u+__builtin_popcount(u)]=dist[u]+1; que.push(u+__builtin_popcount(u)); } if(u-__builtin_popcount(u)>0&&dist[u-__builtin_popcount(u)]==-1){ dist[u-__builtin_popcount(u)]=dist[u]+1; que.push(u-__builtin_popcount(u)); } } cout<