#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef pairpint; typedef vectorvint; #define pb push_back #define mp make_pair #define rep(i,n) for(int i=0;i<(n);i++) templatevoid chmin(T &t,U f){if(t>f)t=f;} templatevoid chmax(T &t,U f){if(t>N; fill_n(dist,10001,INF); dist[1]=1; queueque; que.push(1); while(que.size()){ int p=que.front();que.pop(); int cnt=0; rep(i,20)if(p>>i&1)cnt++; if(p+cnt<=N&&dist[p+cnt]>dist[p]+1){ dist[p+cnt]=dist[p]+1; que.push(p+cnt); } if(p-cnt>0&&dist[p-cnt]>dist[p]+1){ dist[p-cnt]=dist[p]+1; que.push(p-cnt); } } if(dist[N]==INF)cout<<-1<