#include <iostream>

int main()
{
	int N = 0;
	std::cin >> N;
	if (N == 1) {
		std::cout << 1 << std::endl;
		return 0;
	}
	int *jumpPower = (int*)(malloc(sizeof(int)*N));
	int *result = (int*)(malloc(sizeof(int)*N));
	for (int i = 0; i < N; i++) {
		int k = i + 1;
		jumpPower[i] = 0;
		while (k != 0) {
			jumpPower[i] += (k & 1);
			k >>= 1;
		}
	}
	result[0] = 1;
	for (int i = 1; i < N; i++) {
		result[i] = -1;
	}
	bool hoge = true;
	int count = 1;
	while (hoge == true) {
		hoge = false;
		for (int i = 0; i < N; i++) {
			if (result[i] == count) {
				int j = i - jumpPower[i];
				if (j > 0 && result[j] == -1) {
					result[j] = count + 1;
					hoge = true;
				}
				j = i + jumpPower[i];
				if (j == N - 1) {
					std::cout << count + 1 << std::endl;
					return 0;
				}
				else if (j < N - 1 && result[j] == -1) {
					result[j] = count + 1;
					hoge = true;
				}
			}
		}
		count++;
	}
	std::cout << -1 << std::endl;
	return 0;
}