#include #include #include #include #include #include #include #include #include #define ALL(obj) (obj).begin(),(obj).end() #define RALL(obj) (obj).rbegin(),(obj).rend() #define P pair #define MOD 1000000007 #define INF 1012345678 #define NINF (-2147483647-1) #define LLINF 9223372036854775807 using ll = long long; using namespace std; int N; vector A(10010, -1); int f(int n) { int cnt = 0; while (n) { if (n & 1) cnt++; n >>= 1; } return cnt; } void bfs() { queue

q; q.push(P(1, 1)); while (!q.empty()) { P a = q.front(); q.pop(); if (A[a.first] >= 0) continue; A[a.first] = a.second; int d = f(a.first); if (a.first + d >= 1 && a.first + d <= N) { q.push(P(a.first + d, a.second + 1)); } if (a.first - d >= 1 && a.first - d <= N) { q.push(P(a.first - d, a.second + 1)); } } } int main() { cin >> N; bfs(); cout << A[N] << endl; getchar(); getchar(); return 0; }