#include using namespace std; // Function to compute sum of divisors for numbers up to LIMIT vector computeSumOfDivisors(int LIMIT) { vector sumDiv(LIMIT + 1, 1); for (int i = 2; i <= LIMIT; i++) { for (int j = i; j <= LIMIT; j += i) { sumDiv[j] += i; } } return sumDiv; } // Function to find a subset of numbers whose sum of divisors XORs to N bool findSubset(int N, const vector& sumDiv, vector& result) { vector> values; // Store (sum of divisors, number) for (int i = 1; i < sumDiv.size(); i++) { values.emplace_back(sumDiv[i], i); } sort(values.begin(), values.end()); // Sort to prioritize smaller numbers int max_size = values.size(); for (int mask = 1; mask < (1 << max_size); mask++) { // Try all subsets int xor_sum = 0; vector temp_result; for (int i = 0; i < max_size; i++) { if (mask & (1 << i)) { xor_sum ^= values[i].first; temp_result.push_back(values[i].second); } } if (xor_sum == N) { result = temp_result; return true; } } return false; } int main() { int N; cin >> N; if (N == 0) { cout << "-1\n"; return 0; } int LIMIT = 1000; vector sumDiv = computeSumOfDivisors(LIMIT); vector result; if (findSubset(N, sumDiv, result)) { cout << result.size() << "\n"; for (int num : result) cout << num << " "; cout << "\n"; } else { cout << "-1\n"; } return 0; }