func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n;   long long mult(long long a, long long b, long long limit) {     long long x = 0, y = a;     while (b > 0) {       if (b % 2 == 1) {         x = (x + y);         if (x >= limit) return -1;       }       y = (y * 2);       b /= 2;       if (y >= limit && b > 0) return -1;     }     return x;   }   long long calc(long long teams) {     long long ret = 0;     while (teams % 2 == 0) {       long long hlf = teams / 2;       ret += hlf;       teams = hlf;       if (ret > n) return -1;     }     long long prt = mult(teams, teams - 1, 4 * n);     if (prt == -1) return -1;     prt /= 2;     ret += prt;     if (ret > n) return -1;     return ret;   }   int main() {     cin >> n;     vector<long long> sol;     for (long long pw2 = 1, cnt = 0; pw2 <= n * 4; pw2 *= 2, cnt++) {       long long lo = 0, hi = ceil(sqrt(4 * n));       long long found = -1;       while (lo <= hi) {         long long mid = (lo + hi) >> 1;         long long odd_part = 2 * mid + 1;         long long tot = mult(odd_part, pw2, 4 * n);         if (tot == -1) {           hi = mid - 1;           continue;         }         long long calc_runs = calc(tot);         if (calc_runs == -1) {           hi = mid - 1;           continue;         } else if (calc_runs == n) {           found = tot;           break;         } else if (calc_runs < n)           lo = mid + 1;         else           hi = mid - 1;       }       if (found != -1) sol.push_back(found);     }     if (sol.size() == 0) {       printf( -1 n );       return 0;     }     sort(sol.begin(), sol.end());     for (int i = 0; i < sol.size(); ++i) cout << sol[i] << endl;     return 0;   }   