#include #include #include int numofbits(int number) { int a=0; for (; number!=0; number&=number-1) { a++; } return a; } int recursive(int now, int prev, int n, int step, std::unordered_map &alr) { int bit = numofbits(now); if (now + bit == n) { step++; return step; } else if (now + bit > n) { step++; if (alr.find(now-bit) != alr.end()) { return -1; } alr[now] = 1; recursive(now-bit, now, n, step, alr); } else if (now + bit < n) { step++; alr[now] = 1; recursive(now+bit, now, n, step, alr); } } int main() { int n; std::cin >> n; std::unordered_map alr; int step = recursive(1, 1, n, 1, alr); std::cout << step << std::endl; }