#include using namespace std; typedef long long ll; const int INF = 1e8; int bitCount(int bits) { int cnt = 0; for(int mask = 1; mask != 0; mask <<= 1) { if( (bits & mask) != 0 ) ++cnt; } return cnt; } int main() { int N; cin >> N; queue q; q.push(1); vector dp(N + 1, INF); dp[1] = 1; while (!q.empty()) { int now = q.front(); q.pop(); int d = bitCount(now); int l = now - d; if (1 <= l && l <= N && dp[l] == INF) { dp[l] = dp[now] + 1; q.push(l); } int r = now + d; if (1 <= r && r <= N && dp[r] == INF) { dp[r] = dp[now] + 1; q.push(r); } } cout << (dp[N] == INF ? -1 : dp[N]) << endl; }