#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const pair&p){ os< ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os< vector dijkstra(int s,vector>> &G){ const T TINF=numeric_limits::max(); using P=pair; int n=G.size(); vector d(n,TINF); vector b(n,-1);//previous point priority_queue,greater

> q; d[s]=0; q.emplace(d[s],s); while(!q.empty()){ P p=q.top();q.pop(); int v=p.second; if(d[v]d[v]+c){ d[u]=d[v]+c; b[u]=v; q.emplace(d[u],u); } } } return d; } signed main(){ int n;cin>>n; vector>> g(n+1); for(int i=1;i<=n;i++){ int p=__builtin_popcount(i); if(i-p>0) g[i].push_back({i-p,1}); if(i+p<=n)g[i].push_back({i+p,1}); } auto d=dijkstra(1,g); if(d[n]