#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::vector;
vector<long long> ans;
int main() {
  long long n;
  long long d;
  cin >> n;
  ans.clear();
  for (int i = 0;; i++) {
    long long d = ((long long)(1) << i);
    long long r = n - (d - 1);
    if (r < 0) break;
    bool ok = false;
    long long mid;
    if (r == 0) {
      ok = true;
      mid = 0;
    }
    if (!ok) {
      long long rr = r >> 1;
      long long p = 0;
      while (rr) {
        rr >>= 1;
        p++;
      }
      p >>= 1;
      p += 1;
      long long right = (long long)(1) << p;
      long long left = 1;
      long long dd = (d << 1) - 1;
      while (!ok && left <= right) {
        mid = (left + right) / 2;
        long long q = 2 * mid * mid;
        long long res = r - q;
        long long qq = res / mid;
        if (res % mid == 0) {
          if (qq == dd) {
            ok = true;
            break;
          } else if (qq < dd) {
            right = mid - 1;
          } else {
            left = mid + 1;
          }
        } else {
          if (qq >= dd) {
            left = mid + 1;
          } else {
            if (qq + 1 <= dd) {
              right = mid - 1;
            } else {
              long long closeres = mid * dd;
              if (res > closeres) {
                left = mid + 1;
              } else {
                right = mid - 1;
              }
            }
          }
        }
      }
    }
    if (ok) {
      long long t_ans = d * (2 * mid + 1);
      ans.push_back(t_ans);
      for (int i = ans.size() - 2; i >= 0; i--) {
        if (t_ans < ans[i])
          ans[i + 1] = ans[i];
        else {
          ans[i + 1] = t_ans;
          break;
        }
      }
    }
  }
  if (ans.size() == 0) {
    cout << "-1\n";
  } else {
    for (int i = 0; i < ans.size(); i++) cout << ans[i] << "\n";
  }
  return 0;
}
