#include <bits/stdc++.h>
using namespace std;
vector<int> grey[20];
int s[200005];
int main() {
  grey[0].push_back(0);
  for (int j = 1; j < 20; j++) {
    grey[j] = grey[j - 1];
    grey[j].insert(grey[j].end(), grey[j - 1].begin(), grey[j - 1].end());
    reverse(grey[j].begin() + (1 << (j - 1)), grey[j].end());
    for (int i = (1 << (j - 1)); i < grey[j].size(); i++)
      grey[j][i] += (1 << (j - 1));
  }
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", s + i);
  int ans = 0;
  vector<int> ansvec = grey[0];
  for (int j = 1; j < 20; j++) {
    vector<int> shob, basis;
    for (int i = 1; i <= n; i++) {
      int x = s[i];
      if (x >= (1 << j)) continue;
      for (int u : shob) {
        if ((x ^ u) < x) x ^= u;
      }
      if (x) {
        shob.push_back(x), basis.push_back(s[i]);
        sort(shob.begin(), shob.end(), greater<int>());
      }
    }
    if (basis.size() < j) continue;
    ans = j;
    ansvec.clear();
    for (int u : grey[j]) {
      int cur = 0;
      for (int k = 0; k < j; k++) {
        if (u & (1 << k)) cur ^= basis[k];
      }
      ansvec.push_back(cur);
    }
  }
  printf("%d\n", ans);
  for (int u : ansvec) printf("%d ", u);
  printf("\n");
  return 0;
}
