#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
void FWT(vector<ll> &a, bool inv) {
int n = (int)a.size();
for(int step = 1; step < n; step <<= 1) {
for(int i = 0; i < n; i += step << 1) {
for(int j = 0; j < step; j++) {
ll x = a[i + j];
ll y = a[i + j + step];
a[i + j] = x + y;
a[i + j + step] = x - y;
}
}
}
if(inv) {
for(int i = 0; i < n; i++) a[i] /= n;
}
}
const int N = 200005, X = (1 << 20);
int arr[N];
int main() {
cin.tie(0)->sync_with_stdio(false);
int n;
cin >> n;
for(int i = 0; i < n; i++) cin >> arr[i];
vector<int> pref(n + 1, 0);
for(int i = 0; i < n; i++) pref[i + 1] = pref[i] ^ arr[i];
int k = (1 << 20);
vector<ll> F(k, 0);
for(int x : pref) F[x]++;
vector<ll> A = F;
FWT(A, 0);
for(int i = 0; i < k; i++) A[i] = A[i] * A[i];
FWT(A, 1);
vector<int> ans;
if(A[0] > n + 1) ans.push_back(0);
for(int i = 1; i < k; i++) {
if(A[i] > 0) ans.push_back(i);
}
cout << ans.size() << "\n";
for(auto x : ans) {
cout << x << " ";
}
cout << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nIGludDsKdm9pZCBGV1QodmVjdG9yPGxsPiAmYSwgYm9vbCBpbnYpIHsKICAgIGludCBuID0gKGludClhLnNpemUoKTsKICAgIGZvcihpbnQgc3RlcCA9IDE7IHN0ZXAgPCBuOyBzdGVwIDw8PSAxKSB7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkgKz0gc3RlcCA8PCAxKSB7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBzdGVwOyBqKyspIHsKICAgICAgICAgICAgICAgIGxsIHggPSBhW2kgKyBqXTsKICAgICAgICAgICAgICAgIGxsIHkgPSBhW2kgKyBqICsgc3RlcF07CiAgICAgICAgICAgICAgICBhW2kgKyBqXSA9IHggKyB5OwogICAgICAgICAgICAgICAgYVtpICsgaiArIHN0ZXBdID0geCAtIHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpZihpbnYpIHsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSBhW2ldIC89IG47CiAgICB9Cn0KY29uc3QgaW50IE4gPSAyMDAwMDUsIFggPSAoMSA8PCAyMCk7CmludCBhcnJbTl07CmludCBtYWluKCkgewogICAgY2luLnRpZSgwKS0+c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGludCBuOwogICAgY2luID4+IG47CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSBjaW4gPj4gYXJyW2ldOwoKICAgIHZlY3RvcjxpbnQ+IHByZWYobiArIDEsIDApOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgcHJlZltpICsgMV0gPSBwcmVmW2ldIF4gYXJyW2ldOwoKICAgIGludCBrID0gKDEgPDwgMjApOwoKICAgIHZlY3RvcjxsbD4gRihrLCAwKTsKICAgIGZvcihpbnQgeCA6IHByZWYpIEZbeF0rKzsKCiAgICB2ZWN0b3I8bGw+IEEgPSBGOwogICAgRldUKEEsIDApOwogICAgZm9yKGludCBpID0gMDsgaSA8IGs7IGkrKykgQVtpXSA9IEFbaV0gKiBBW2ldOwogICAgRldUKEEsIDEpOwoKICAgIHZlY3RvcjxpbnQ+IGFuczsKICAgIGlmKEFbMF0gPiBuICsgMSkgYW5zLnB1c2hfYmFjaygwKTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBrOyBpKyspIHsKICAgICAgICBpZihBW2ldID4gMCkgYW5zLnB1c2hfYmFjayhpKTsKICAgIH0KCiAgICBjb3V0IDw8IGFucy5zaXplKCkgPDwgIlxuIjsKICAgIGZvcihhdXRvIHggOiBhbnMpIHsKICAgICAgICBjb3V0IDw8IHggPDwgIiAiOwogICAgfQogICAgY291dCA8PCAiXG4iOwp9Cg==