#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:200000000")
using namespace std;
const int INF = (int)1E9;
const long long INF64 = (long long)1E18;
const double EPS = 1E-9;
const double PI = acos((double)0) * 2;
long long n;
bool read() { return !!(cin >> n); }
long long my_sqrt(long long x) {
  long long l = 0, r = min(x, 2ll * INF + INF / 10);
  while (l < r) {
    long long m = (l + r + 1) / 2;
    if (m * m <= x)
      l = m;
    else
      r = m - 1;
  }
  return l;
}
void norm(vector<long long> &n) {
  long long c = 0;
  for (int i = 0; i < int(n.size()); ++i) {
    n[i] += c;
    c = n[i] / INF64;
    n[i] %= INF64;
  }
  if (c) n.push_back(c);
}
vector<long long> make_lnum(long long n, int p) {
  vector<long long> res(1, n);
  norm(res);
  while (p) {
    for (int i = 0; i < int(res.size()); ++i) res[i] *= 2;
    norm(res);
    --p;
  }
  return res;
}
bool cmp(const vector<long long> &a, const vector<long long> &b) {
  if (a.size() != b.size()) return a.size() < b.size();
  for (int i = int(a.size()) - 1; i >= 0; --i)
    if (a[i] != b[i]) return a[i] < b[i];
  return false;
}
void out(const vector<long long> &n) {
  for (int i = int(n.size()) - 1; i >= 0; --i) {
    if (i == (int)n.size() - 1) {
      cout.width(0);
      cout << n[i];
    } else {
      cout.width(18);
      cout.fill('0');
    }
  }
  puts("");
}
int f(int p, long long m) {
  long long pw = 1ll << p;
  double pwd = (double)pw;
  long long x = 2 * m - 1;
  double xd = (double)x;
  double vald = xd * ((xd - 1) / 2 + pwd - 1);
  if (vald > 2E18) return +1;
  long long val = x * ((x - 1) / 2 + pw - 1);
  return val == n ? 0 : (val < n ? -1 : +1);
}
void solve() {
  vector<long long> ans;
  for (int p = 0; p < int(62); ++p) {
    long long l = 1, r = INF + 10;
    while (l < r) {
      long long m = (l + r + 1) / 2;
      if (f(p, m) <= 0)
        l = m;
      else
        r = m - 1;
    }
    if (f(p, l) == 0) {
      long long x = 2 * l - 1;
      ans.push_back(x << p);
    }
  }
  sort(ans.begin(), ans.end());
  if (ans.empty())
    puts("-1");
  else
    for (int i = 0; i < int(ans.size()); ++i) cout << ans[i] << endl;
}
int main() {
  if (!read()) throw;
  solve();
}
