#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // C++ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace::std; vector steps(10001, 0); void dfs(int N, int n, int step){ steps[n] = step; int bit = 0; for(int i = 0;i < 20;i++){ bit += ((n >> i) & 1); } if(n-bit >= 1 && (step+1 < steps[n-bit] || !steps[n-bit])) dfs(N, n-bit, step+1); if(n+bit <= N && (step+1 < steps[n+bit] || !steps[n+bit])) dfs(N, n+bit, step+1); } int main(){ int N; cin >> N; dfs(N, 1, 1); if(steps[N]) cout << steps[N] << endl; else cout << -1 << endl; // for(int i = 0;i < 10;i++){ // cout << steps[i] << endl; // } }