#include using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) int main() { int n; cin >> n; vector counts(n, 0); vector moves(n, -1); rep(i, n) { rep(j, 14) counts[i] += ((i+1) >> j) % 2; } moves[0] = 1; deque pos; pos.push_back(0); while (pos.size() > 0) { int val = pos.at(0); pos.pop_front(); int f = val + counts[val]; int b = val - counts[val]; if(f < n && moves[f] == -1) { moves[f] = moves[val] + 1; pos.push_back(f); } if(b >= 0 && moves[b] == -1) { moves[b] = moves[val] + 1; pos.push_back(b); } } cout << moves[n-1] << endl; }