#include using namespace std; using Int = int64_t; using uInt = uint64_t; template using min_heap = priority_queue, greater>; template using max_heap = priority_queue, less>; void solve( /* Copyright by Urtusea */ ) { int n; cin >> n; vector vis(n + 1); queue q; q.push(vis[1] = 1); while (!q.empty()) { auto u = q.front(); q.pop(); int v = __popcount(u); if (u + v <= n && !vis[u + v]) { vis[u + v] = vis[u] + 1; q.push(u); } if (u - v > 0 && !vis[u - v]) { vis[u - v] = vis[u] + 1; q.push(u); } } if (vis[n]) { cout << vis[n] << '\n'; } else { cout << -1 << '\n'; } } int main(int argc, char *argv[], char *envp[]) { cin.tie(nullptr)->sync_with_stdio(false); // for (int i = 1, n = (cin >> n, n); i <= n; i++) solve(); return 0; }