#include #include #include #include #include #include #include #include #include using namespace std; int countNumOfOneInBitRepresentation(int i) { int count = 0; while (i) { if (i & 1) { count += 1; } i = i >> 1; } return count; } int main() { int N; cin >> N; queue q; q.push(1); int m[100005]; for (int i = 1; i <= N; ++i) { m[i] = -1; } m[1] = 1; while (!q.empty()) { int x = q.front(); q.pop(); if (x == N) { break; } int numOfOneBit = countNumOfOneInBitRepresentation(x); int array[] = {x + numOfOneBit, x - numOfOneBit}; for (int i = 0; i < 2; ++i) { if (1 <= array[i] and array[i] <= N and m[array[i]] == -1) { m[array[i]] = m[x] + 1; q.push(array[i]); } } } cout << m[N] << "\n"; return 0; }