#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define INF 1000000001 #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define RFOR(i, a, b) for (int i = (a); i >= (b); i--) using namespace std; typedef long long ll; typedef pair pii; const double PI = acos(-1.0); int N; vector G[100001]; int dist[100001]; int main() { ios::sync_with_stdio(false); cin >> N; FOR(i,1,N+1) { int bc=0, x=i; while (x) { if (x&1) bc++; x >>= 1; } if (i-bc>0) G[i].push_back(i-bc); if (i+bc<=N) G[i].push_back(i+bc); } queue< pii > q; q.push( pii(1, 1) ); memset(dist, 0, sizeof(dist)); while (!q.empty()) { pii p = q.front(); q.pop(); if (dist[p.first]) continue; dist[p.first] = p.second; FOR(i,0,G[p.first].size()) { q.push(pii(G[p.first][i], p.second+1)); } } if (dist[N]) cout << dist[N] << endl; else cout << -1 << endl; return 0; }