#include <bits/stdc++.h>
using namespace std;
const double EPS = 1E-9;
const int INF = 1000000000;
const long long INF64 = (long long)1E18;
const double PI = 3.1415926535897932384626433832795;
typedef struct {
  int a;
  double p;
} tpo;
long long bp(long long n, long long t2) {
  long long k0 = 1, kn = 2 * sqrt((long double)2 * n) + 30, kc;
  if (t2 != 1) {
    long long kj = n / (t2 - 1) + 1;
    if (kj < kn) kn = kj;
  }
  while (kn - k0 > 1) {
    kc = (k0 + kn) / 2;
    if (kc * (kc - 1) / 2 + kc * (t2 - 1) < 0)
      kn = kc;
    else {
      if (kc * (kc - 1) / 2 + kc * (t2 - 1) > n)
        kn = kc;
      else
        k0 = kc;
    }
  }
  if (k0 * (k0 - 1) / 2 + k0 * (t2 - 1) == n) {
    if (k0 % 2 == 1) return k0;
    for (; k0 * (k0 - 1) / 2 + k0 * (t2 - 1) == n; ++k0)
      if (k0 % 2 == 1) return k0;
    return -1;
  }
  k0 += 1;
  if (k0 * (k0 - 1) / 2 + k0 * (t2 - 1) == n) {
    if (k0 % 2 == 1) return k0;
    for (; k0 * (k0 - 1) / 2 + k0 * (t2 - 1) == n; ++k0)
      if (k0 % 2 == 1) return k0;
    return -1;
  }
  return -1;
}
int main() {
  long long i, j, n, k, s, smax = -1;
  cin >> n;
  long long d2 = 1, dd[100], idd = 0;
  for (; 2 * INF64 - d2 >= d2;) {
    dd[idd++] = d2;
    d2 *= 2;
  }
  long long all[200], iall = 0;
  for (i = 0; i < idd; ++i) {
    long long k = bp(n, dd[i]);
    if (k != -1) all[iall++] = k * dd[i];
  }
  if (iall == 0) {
    cout << -1 << endl;
    return 0;
  }
  sort(all, all + iall);
  for (i = 0; i < iall; ++i)
    if (i == 0 || all[i] != all[i - 1]) {
      cout << all[i] << endl;
    }
  return 0;
}
