#include // cout, endl, cin #include //sqrt pow #include // string, to_string, stoi #include // vector #include // min, max, swap, sort, reverse, lower_bound, upper_bound #include // pair, make_pair #include // tuple, make_tuple #include // int64_t, int*_t #include // printf #include // map #include // queue, priority_queue #include // set #include // stack #include // dequef #include // unordered_map #include // unordered_set #include // bitset #include // isupper, islower, isdigit, toupper, tolower #include #define rep(i, n) for (int i = 0; i < n; i++) using ll = long long; using ld = long double; #define vi vector #define vvi vector #define vl vector #define pii pair #define pll pair #define all(a) (a).begin(), (a).end() #define mod 1000000007 using namespace std; int cnt(int n){ int res = 0; while(n){ res += (n & 1); n >>= 1; } return res; } int main(){ int n; cin >> n; int pos = 1, ans = 1; while(pos != n){ int num = cnt(pos); if(pos + num > n && pos - num < 1){ cout << -1 << endl; return 0; } if(pos + num > n) pos -= num; else pos += num; ans++; if(ans > n * 10){ cout << -1 << endl; return 0; } } cout << ans << endl; }