#include <bits/stdc++.h>
using namespace std;
template <class c>
struct rge {
  c b, e;
};
template <class c>
rge<c> range(c i, c j) {
  return rge<c>{i, j};
}
template <class c>
auto dud(c* x) -> decltype(cerr << *x, 0);
template <class c>
char dud(...);
struct debug {
  template <class c>
  debug& operator<<(const c&) {
    return *this;
  }
};
long long power(long long x, long long y, long long M) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) res = (res * x) % M;
    y >>= 1;
    x = (x * x) % M;
  }
  return res % M;
}
long long power(long long x, long long y) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) res = (res * x);
    y >>= 1;
    x = (x * x);
  }
  return res;
}
const long long mxn = 1e6 + 6, mod = 1e9 + 7, inf = 1e18;
long long t, casee = 1;
void test_case() {
  long long n;
  cin >> n;
  vector<long long> a(n);
  for (long long i = 0; i < n; i++) cin >> a[i];
  long long mx = 0;
  for (long long i = 0; i <= 5000; i++) {
    for (long long j = 0; j < 5000; j++) {
      mx = max(mx, (i ^ j) + 10);
    }
  }
  debug() << " ["
          << "mx"
             ": "
          << (mx) << "] ";
  vector<vector<long long>> possiblesubsetxor(mx, vector<long long>());
  for (long long i = 0; i < mx; i++) possiblesubsetxor[i].push_back(0);
  vector<long long> pos(mx, 0);
  vector<long long> help(mx, mx);
  pos[0] = 1;
  help[0] = 0;
  for (long long i = 0; i < n; i++) {
    for (long long currxor : possiblesubsetxor[a[i]]) {
      long long newxor = currxor ^ a[i];
      pos[newxor] = 1;
      if (a[i] < help[newxor]) {
        for (long long k = a[i] + 1; k < help[newxor]; k++) {
          possiblesubsetxor[k].push_back(newxor);
        }
        help[newxor] = a[i];
      }
    }
    possiblesubsetxor[a[i]].clear();
  }
  long long cnt = 0;
  for (long long i = 0; i < mx; i++) cnt += pos[i];
  cout << cnt << "\n";
  for (long long i = 0; i < mx; i++) {
    if (pos[i]) cout << i << " ";
  }
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  t = 1;
  while (t--) {
    test_case();
    casee++;
  }
  return 0;
}
