#include using namespace std; const int MAXN = 10005; const int INF = (int)1e9; vector G[MAXN]; int N; int bfs() { vector dist(N + 1, INF); queue q; q.push(1); dist[1] = 0; while (!q.empty()) { int cur = q.front(); q.pop(); for (size_t i = 0; i < G[cur].size(); ++i) { int next = G[cur][i]; if (dist[next] == INF) { dist[next] = dist[cur] + 1; q.push(next); } } } return dist[N]; } int main() { scanf("%d", &N); for (int i = 1; i <= N; ++i) { int cnt = 0; int tmp = i; while (tmp) { cnt += tmp & 1; tmp >>= 1; } G[i].push_back(i + cnt); if (i - cnt > 0) G[i].push_back(i - cnt); } int ans = bfs(); if (ans == INF) puts("-1"); else printf("%d\n", ans + 1); return 0; }