#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const double eps = 1e-9;
const double INF = inf;
const double EPS = eps;
vector<long long> V;
int cmp(long long b, long double d, long long a) {
  if (d > 2e18) return 1;
  if (b > a) return 1;
  if (b == a) return 0;
  return -1;
}
int calc(long long n, long long p, long long k) {
  long double d = (2.0 * k + 1.0) * (k + p - 1ll);
  long long l = (2ll * k + 1) * (k + p - 1ll);
  return cmp(l, d, n);
}
void solve(long long n, long long p) {
  p = (1ll << p);
  if (p - 1 > n) return;
  long long l = 0, r = n + 1;
  while (r - l > 1) {
    long long m = (l + r) / 2;
    (calc(n, p, m) <= 0) ? (l = m) : (r = m);
  }
  if (calc(n, p, l) == 0) V.push_back(p * (2ll * l + 1ll));
}
int main() {
  long long n;
  int i;
  scanf("%I64d", &n);
  for (i = 0; i < 60; i++) solve(n, i);
  sort(V.begin(), V.end());
  if (!V.size()) {
    puts("-1");
    return 0;
  }
  for (i = 0; i < (int)V.size(); i++) printf("%I64d\n", V[i]);
  ;
  return 0;
}
