#include <bits/stdc++.h>
const long long MAX_N = 2e5 + 100;
const long long MOD = 1e9 + 7;
using namespace std;
int a[MAX_N];
int n;
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  set<int> st;
  st.insert(0);
  for (int i = 1; i <= n; ++i) {
    if (st.count(a[i])) continue;
    set<int> newst;
    for (auto x : st) newst.insert(a[i] ^ x);
    for (auto x : newst) st.insert(x);
  }
  int mx = 0;
  for (auto x : st) {
    if (!x) continue;
    if (x == mx + 1)
      mx++;
    else
      break;
  }
  int x = (int)floor(log2(mx + 1));
  vector<int> vec;
  vec.push_back(0);
  st.clear();
  for (int i = 1; i <= n; ++i) {
    if (a[i] < (1 << x)) st.insert(a[i]);
  }
  set<int> tst;
  tst.insert(0);
  for (int i = 1; i <= x; ++i) {
    while (st.size()) {
      int u = *st.begin();
      st.erase(u);
      if (tst.count(u)) continue;
      for (int j = (1 << (i - 1)) - 1; j >= 0; --j)
        vec.push_back(vec[j] ^ u), tst.insert(vec[j] ^ u);
      break;
    }
  }
  cout << (log2(vec.size())) << "\n";
  for (auto x : vec) printf("%d ", x);
  return 0;
}
