#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // 奇数一定无法拆分(因含2^0=1)
    if (n % 2 != 0) {
        cout << -1 << endl;
        return 0;
    }
    
    vector<int> parts;  // 存储拆分后的数
    int current = 2;    // 从最小的2的正整数次幂(2^1)开始
    
    // 找到不超过n的最大2的正整数次幂
    while (current * 2 <= n) {
        current *= 2;
    }
    
    // 从最大的幂开始,贪心选取符合条件的数
    while (current >= 2) {  // 确保只处理2的正整数次幂(最小为2^1=2)
        if (current <= n) {
            parts.push_back(current);
            n -= current;  // 减去已选取的数
        }
        current /= 2;  // 检查更小的幂
    }
    
    // 若能完全拆分,输出结果(已按从大到小顺序)
    if (n == 0) {
        for (size_t i = 0; i < parts.size(); ++i) {
            if (i > 0) cout << " ";
            cout << parts[i];
        }
        cout << endl;
    } else {
        cout << -1 << endl;
    }
    
    return 0;
}
/**************************************************************
	Problem: 2397
	User: houshanglin
	Language: C++
	Result: Accepted
	Time:70 ms
	Memory:2072 kb
****************************************************************/