#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define MOD 1000000007 int main() { int n; cin >> n; queue que; que.push(1); vector dist(n + 1, -1); dist[1] = 1; while (!que.empty()) { int p = que.front(); que.pop(); int b = __builtin_popcount(p); if (0 < p - b && dist[p - b] == -1) { que.push(p - b); dist[p - b] = dist[p] + 1; } if (p + b <= n && dist[p + b] == -1) { que.push(p + b); dist[p + b] = dist[p] + 1; } } cout << dist[n] << endl; return 0; }