#include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; const int INF=0x3f3f3f3f; const int MAXN=10001; int s2(int x){ int cnt=0; while(x){ if(x&1)cnt++; x >>= 1; } return cnt; } int t[MAXN],d[MAXN]; queue q; int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) { t[i]=s2(i); } memset(d,-1,sizeof(d)); d[1]=1; q.push(1); while(!q.empty()){ int r=q.front();q.pop(); if(r==n){ break; } if(r+t[r]<=n && d[r+t[r]]==-1){ d[r+t[r]]=d[r]+1; q.push(r+t[r]); } if(r-t[r]>=1 && d[r-t[r]]==-1){ d[r-t[r]]=d[r]+1; q.push(r-t[r]); } } printf("%d\n", d[n]); return 0; }