#include #include using namespace std; const int INF = 100000000; int main(void){ int n, i; int v[10005], d[10005]; cin >> n; for(int i=1;i<=n;i++){ v[i] = 0; } for(int i=1;i<=n;i++){ d[i] = INF; } queue que; que.push(1); v[1] = 1; d[1] = 1; while(!que.empty()){ int bit; i = que.front(); que.pop(); bit = __builtin_popcount(i); if(i+bit >= 1 && i+bit <= n && v[i+bit] == 0){ que.push(i+bit); v[i+bit] = 1; d[i+bit] = d[i] + 1; } if(i-bit >= 1 && i+bit <= n && v[i+bit] == 0){ que.push(i-bit); v[i-bit] = 1; d[i-bit] = d[i] + 1; } } cout << (d[n] != INF ? d[n] : -1) << endl; return 0; }