#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int p[25], b[25];
bool ins(int x) {
  for (int i = 20; ~i; i--) {
    if (~x >> i & 1) continue;
    if (p[i])
      x ^= p[i];
    else {
      for (int j = 0; j < i; j++)
        if (x >> j & 1) x ^= p[j];
      for (int j = i + 1; j <= 20; j++)
        if (p[j] >> i & 1) p[j] ^= x;
      p[i] = x;
      return 1;
    }
  }
  return 0;
}
int a[N], ans[N * 2];
bool vis[N * 2];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  sort(a + 1, a + n + 1);
  int now = 1, lim = 0;
  for (int i = 1, Size = 0; i <= 20; i++) {
    while (now <= n && a[now] < 1 << i) Size += ins(a[now++]);
    if (Size == i) lim = i;
  }
  if (!lim) {
    puts("0\n0");
    return 0;
  }
  memset(p, 0, sizeof(p));
  for (int i = 1, cnt = 0; i <= n; i++)
    if (a[i] < 1 << lim && ins(a[i])) b[cnt++] = a[i];
  now = 0;
  int cnt = 0;
  while (cnt < 1 << lim) {
    ans[cnt++] = now;
    vis[now] = 1;
    for (int i = 0; i < lim; i++)
      if (!vis[now ^ b[i]]) {
        now ^= b[i];
        break;
      }
  }
  cout << lim << "\n";
  for (int i = 0; i < cnt; i++) cout << ans[i] << " \n"[i == cnt - 1];
}
