#include #define ALL(x) (x).begin(), (x).end() #define RALL(x) (x).rbegin(), (x).rend() #define FSP(x) fixed << setprecision(x) using namespace std; using ll = long long; constexpr ll INF = LLONG_MAX; //constexpr ll P = 1e9 + 7; //constexpr ll P = 998244353; constexpr long double PI = acosl(-1); void Yes() {cout << "Yes\n";} void No() {cout << "No\n";} void YES() {cout << "YES\n";} void NO() {cout << "NO\n";} int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n; cin >> n; if (n == 1) { cout << 1 << endl; return 0; } vector> v(n); for (ll i = 0; i < n; i++) { ll m = __builtin_popcount(i + 1); if (0 <= i - m) v[i].push_back(i - m); if (i + m < n) v[i].push_back(i + m); } queue task; task.push(0); vector seen(n, false); seen[0] = true; ll depth = 1; while (task.size()) { ll sz = task.size(); while (sz--) { ll x = task.front(); task.pop(); for (auto i : v[x]) { if (i == n - 1) { cout << depth + 1 << endl; return 0; } if (seen[i]) continue; task.push(i); seen[i] = true; } } depth++; } cout << -1 << endl; }