#include using namespace std; int main() { int N; cin >> N; const int inf = 11111; vector dist(N + 1, inf); dist[1] = 1; queue que; que.push(1); while (!que.empty()) { int cur = que.front(); que.pop(); int nx1 = cur + __builtin_popcount(cur); int nx2 = cur + __builtin_popcount(cur); if (1 <= nx1) { if (dist[nx1] > dist[cur] + 1) { dist[nx1] = dist[cur] + 1; que.push(nx1); } } if (nx2) { if (dist[nx2] > dist[cur] + 1) { dist[nx2] = dist[cur] + 1; que.push(nx2); } } } int ans = (dist[N] == inf ? -1 : dist[N]); // for (int i = 1; i <= N; i++) cout << dist[i] << " \n"[i == N]; cout << ans << endl; return 0; }