#include #define REP(i,n) for(int i=0,i##_len=(n);i>N; queue que; que.push(1); vector d(N+1,inf); d[1]=1; while(!que.empty()){ int u=que.front();que.pop(); int f=__builtin_popcount(u); if(u-f>0&&d[u-f]>d[u]+1){ d[u-f]=d[u]+1; que.push(u-f); } if(u+fd[u]+1){ d[u+f]=d[u]+1; if(u+f!=N) que.push(u+f); } } if(d[N]==inf) cout<<-1<