#include #include #include #include #include #include #include #include #include #include #include #define INF 100000000 using namespace std; int N; int dist[10010]; bool inflag[10010]; queue ready; int main() { int i; cin >> N; dist[1] = 1; for (i = 2; i <= 10000; i++) dist[i] = INF; ready.push(1); while (!ready.empty()) { int now = ready.front(); ready.pop(); int now_c = now; int bits = 0; for (i = 13; i >= 0; i--) { if (now_c >= pow(2, i)) { bits++; now_c -= pow(2, i); } } if (now - bits >= 2 && dist[now - bits] > dist[now] + 1) { dist[now - bits] = dist[now] + 1; ready.push(now - bits); } if (now + bits <= N && dist[now + bits] > dist[now] + 1) { dist[now + bits] = dist[now] + 1; ready.push(now + bits); } } if (dist[N] == INF) cout << "-1" << endl; else cout << dist[N] << endl; return 0; }