#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i, n) for(int i = 0; i < (n); i++) #define per(i, n) for(int i = (n) - 1; i >= 0; i--) using ll = long long; #define vi vector #define vvi vector #define vl vector #define pii pair #define pll pair #define all(a) (a).begin(), (a).end() #define rall(a) (a).rbegin(), (a).rend() constexpr int mod = 1000000007; using namespace std; template bool chmax(T &a, const U &b){ return a < b ? (a = b, 1) : 0; } template bool chmin(T &a, const U &b){ return a > b ? (a = b, 1) : 0; } int main(){ int n; cin >> n; vi dist(n + 1, -1); dist[1] = 1; queue que; que.push(1); while(!que.empty()){ const int pos = que.front(); que.pop(); const int b = __builtin_popcount(pos); for(int i = pos-b; i <= pos+b; i += b*2){ if(i > 0 && i <= n && dist[i] == -1){ dist[i] = dist[pos] + 1; que.push(i); } } } cout << dist[n] << "\n"; }