#include #include #include #include #define INF (2 << 28) using namespace std; int bfs(int n){ int used[11111]; fill_n(used, 11111, INF); queue > que; que.push(make_pair(1, 0)); while(!que.empty()){ int now = que.front().first, cnt = que.front().second; que.pop(); if(now == n) return cnt + 1; int inc = __builtin_popcount(now); if(now + inc <= n && used[now + inc] > cnt + 1){ que.push(make_pair(now + inc, cnt + 1)); used[now + inc] = cnt + 1; } if(now - inc > 0 && used[now - inc] > cnt + 1){ que.push(make_pair(now - inc, cnt + 1)); used[now - inc] = cnt + 1; } } return -1; } int main(){ int n; cin >> n; cout << bfs(n) << endl; }