#include <bits/stdc++.h>
using namespace std;
long long potencias[64];
inline long long min(long long ll1, long long ll2) {
  return ll1 < ll2 ? ll1 : ll2;
}
bool binarySearch(int rondas, long long n) {
  long long max = min((n / (potencias[rondas] + 1LL) + 1LL) / 2, INT_MAX);
  long long min = 0LL;
  long long mid, res, val;
  while (max >= min) {
    mid = (max + min) / 2;
    val = 2 * mid + 1LL;
    res = val * mid + val * potencias[rondas];
    if (res == n) {
      cout << val * (potencias[rondas] + 1) << "\n";
      return true;
    }
    if (res < n) {
      min = mid + 1LL;
    } else {
      max = mid - 1LL;
    }
  }
  return false;
}
int main(int argc, char** argv) {
  potencias[0] = 0LL;
  for (int i = 0; i < 63; i++) {
    potencias[i + 1] = potencias[i] * 2 + 1LL;
  }
  long long n;
  scanf("%I64d", &n);
  bool fail = true;
  for (int i = 0; i < 64; i++) {
    if (binarySearch(i, n)) fail = false;
  }
  if (fail) cout << -1 << "\n";
}
