#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; bool b[10010] = { false }; int main() { int n; cin >> n; queue> que; que.push(make_pair(1,1)); b[1] = true; while(!que.empty()){ int x = que.front().first; int y = que.front().second; if (x == n) { cout << y << endl; return 0; } que.pop(); bitset<15> bit = x; int co = 0; for (int i = 0; i < 15; i++) { if (bit[i]) { co++; } } if (x + co <= n) { if (!b[x + co]) { que.push(make_pair(x + co, y + 1)); b[x + co] = true; } } if (x - co > 0) { if (!b[x - co]) { que.push(make_pair(x - co, y + 1)); b[x - co] = true; } } } cout << "-1" << endl; return 0; }