#include <bits/stdc++.h>
using namespace std;
int a, b, c, t, d, ans, N, M, tt, da[1000007], q[27], q2[27], w[27],
    an[1000007];
int ch[1000007];
int main() {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) scanf("%d", &da[i]);
  for (int ii = 0; ii <= 18; ii++) {
    for (int j = 0; j <= 18; j++) q[j] = 0;
    for (int j = 1; j <= N; j++)
      if (da[j] < (1 << ii)) {
        a = da[j];
        b = a;
        for (int i = 18; i >= 0; i--)
          if ((a ^ q[i]) < a) a ^= q[i];
        if (a)
          for (int i = 18; i >= 0; i--)
            if (a & (1 << i)) {
              q[i] = a;
              q2[i] = b;
              break;
            }
      }
    d = 0;
    while (q[d]) w[d] = q2[d], d++;
    if (d < ii) continue;
    ans = max(ans, d);
    ch[1] = 0;
    t = 1;
    if (d)
      for (int i = 0; i <= d - 1; i++) {
        for (int j = 1; j <= t; j++) ch[t + j] = ch[t - j + 1] ^ (1 << i);
        t *= 2;
      }
    int la = 0;
    for (int i = 1; i <= t; i++) {
      c = 0;
      for (int j = 0; j <= 18; j++)
        if (ch[i] & (1 << j)) c ^= q2[j];
      an[i] = c;
    }
  }
  printf("%d\n", ans);
  for (int i = 1; i <= 1 << ans; i++) printf("%d ", an[i]);
  printf("\n");
  return 0;
}
