#include #include #include #include using namespace std; int count(int n) { int cnt = 0; while (n > 0) { if (n % 2 == 1) cnt++; n = n / 2; } return cnt; } bool in(vector v, int n) { for (auto var : v) { if (var == n) return true; } return false; } int solve(int n) { queue> q; q.push(make_pair(1, 1)); vector v; v.push_back(1); while (!q.empty()) { pair tmp = q.front(); int num = tmp.first; int cnt = tmp.second; q.pop(); if (num == n) return cnt; int forward = num + count(num); int backward = num - count(num); if (forward <= n) { if (!in(v, forward)) { q.push(make_pair(forward, cnt+1)); v.push_back(forward); } } if (backward > 0) { if (!in(v, backward)) { q.push(make_pair(backward, cnt+1)); v.push_back(backward); } } } return -1; } int main(int argc, char const* argv[]) { int n; cin >> n; cout << solve(n) << endl; return 0; }