#include #include #include using namespace std; int n; void dfs(vector &block, int s, int depth = 0){ int w = __builtin_popcount(s); block[s] = depth; if(block[max(1, s - w)] == 0) dfs(block, max(1, s - w), depth + 1); if(block[min(n, s + w)] == 0) dfs(block, min(n, s + w), depth + 1); } int main(){ std::cin >> n; vector block(n + 1, 0); dfs(block, 1); if(n == 1)std::cout << 0 << std::endl; else if(block[n] != 0)std::cout << block[n] << std::endl; else std::cout << -1 << std::endl; return 0; }