#include<iostream>
#include<queue>
using namespace std;

int N;
int v[10001];
int d[10001];

const int INF = 1000000;

int main(){
	int i, bit; 
	cin >> N;
	for(i=1; i<=N; i++) v[i]=0;
	for(i=1; i<=N; i++) d[i]=INF;

	queue<int> Q;
	Q.push(1);
	v[1]=1;
	d[1]=1;
	i=1;
	while(!Q.empty()){
		i=Q.front();
		Q.pop();
		bit = __builtin_popcount(i);
        if(i+bit>=1 && i+bit<=N && v[i+bit]==0){
			Q.push(i + bit);	
			v[i + bit]=1;
			d[i + bit]=d[i]+1;
		}
		if(i-bit>=1 && i-bit<=N && v[i-bit]==0){
			Q.push(i - bit);	
			v[i - bit]=1;
			d[i - bit]=d[i]+1;
		}
	}

	cout << (d[N] != INF ? d[N] : -1) << endl;

return 0;
}