#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX_N 10000 using namespace std; typedef long long ll; typedef unsigned long long ull; int count_1_bits(int n) { int ret = 0; while (n) { if (n & 1) { ret++; } n >>= 1; } return ret; } int main(void) { int n, dp[MAX_N + 1]; cin >> n; fill(dp + 1, dp + n + 1, -1); queue q; dp[1] = 1; q.push(1); while (!q.empty()) { int m = q.front(); q.pop(); int d = count_1_bits(m); if (m + d <= n && (dp[m + d] == -1 || dp[m + d] > dp[m] + 1)) { dp[m + d] = dp[m] + 1; q.push(m + d); } if (m - d >= 0 && (dp[m - d] == -1 || dp[m - d] > dp[m] + 1)) { dp[m - d] = dp[m] + 1; q.push(m - d); } } cout << dp[n] << endl; return 0; }