#include <bits/stdc++.h> typedef long long ll; #define INF 1000000000 #define MOD 1000000007 using namespace std; int dx[4]={1,0,-1,0},dy[4]={0,-1,0,1}; int calc(int num){ int cnt=0; while(num){ if(num%2)cnt++; num=floor(num/2); } return cnt; } int main(void){ int n; cin>>n; vector<ll>dp(n+2,INF); queue<int>que; que.push(1); dp[1]=1; while(!que.empty()){ int tmp=que.front(); que.pop(); int num=calc(tmp); int pre=tmp-num,next=tmp+num; if(pre>=1){ if(dp[pre]>dp[tmp]+1){ que.push(pre); dp[pre]=dp[tmp]+1; } } if(next<=n){ if(dp[next]>dp[tmp]+1){ que.push(next); dp[next]=dp[tmp]+1; } } } if(dp[n]!=INF){ cout<<dp[n]<<endl; }else{ cout<<-1<<endl; } }