#include int q[10000],qf,ql; void q_a(int a){ q[ql] = a; ql++; } int q_t(void){ qf++; return q[qf-1]; } int min(int a,int b){ if(a>b){return b;}else{return a;} } int main(void){ int N,i,m,d[10000],v,c[10000]; scanf("%d",&N); for(i=0;i0){ if(m%2 == 1){ d[i]++; } m = m/2; } } qf=0;ql=0; q_a(1); c[0] = 1; while(qf0){ if(c[v - d[v-1]-1] == -1){ q_a(v - d[v-1]); c[v - d[v-1]-1] = c[v-1] + 1; }else{ c[v - d[v-1]-1] = min(c[v - d[v-1]-1],c[v-1] + 1); } } if(v + d[v-1]<=N){ if(c[v + d[v-1]-1] == -1){ q_a(v + d[v-1]); c[v + d[v-1]-1] = c[v-1] + 1; }else{ c[v + d[v-1]-1] = min(c[v + d[v-1]-1],c[v-1] + 1); } } } printf("%d\n",c[N-1]); }