#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;
    }
}