#include using namespace std; int n; void write(vector &itr, int p, int d) { if (p + d < 1 || p + d > n) return; if (itr.at(p + d - 1) == -1) itr.at(p + d - 1) = itr.at(p - 1) + 1; if (p + d == n) { cout << itr.at(n - 1) << endl; exit(0); } } int main() { cin >> n; vector itr(n, -1), q; write(itr, 1, 1); q.push_back(1); for (int i = 0;; i++) { int p = q.at(i), d = bitset<32>(p).count(); write(itr, p + d, i); q.push_back(p + d); write(itr, p - d, i); q.push_back(p - d); } }