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