#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
inline int read() {
  int e = 0, m = 1;
  char z = getchar();
  while (z < '0' || z > '9') {
    if (z == '-') m = -1;
    z = getchar();
  }
  while (z >= '0' && z <= '9') {
    e = e * 10 + z - '0', z = getchar();
  }
  return e * m;
}
int n, m;
int a[100], ans[100];
int f[(1 << 22) + 10], pre[(1 << 22) + 10], key[(1 << 22) + 10];
int fri1, fri2;
queue<int> q;
void bfs() {
  memset(f, 0, sizeof(f));
  memset(pre, -1, sizeof(pre));
  memset(key, -1, sizeof(key));
  for (register int q1 = 0; q1 < n; q1++) {
    f[a[q1]] = 1;
    key[a[q1]] = q1;
    q.push(a[q1]);
  }
  int now, tmp;
  while (!q.empty()) {
    now = q.front();
    q.pop();
    for (register int q1 = 0; q1 < n; q1++)
      if (now & (1 << q1)) {
        tmp = now | a[q1];
        if (!f[tmp]) {
          f[tmp] = f[now] + 1;
          key[tmp] = q1;
          pre[tmp] = now;
          q.push(tmp);
          if (tmp == ((1 << n) - 1)) return;
        }
      }
  }
}
int main() {
  n = read(), m = read();
  for (register int q1 = 0; q1 < n; q1++) a[q1] = (1 << q1);
  for (register int q1 = 1; q1 <= m; q1++) {
    fri1 = read() - 1, fri2 = read() - 1;
    a[fri1] |= (1 << fri2);
    a[fri2] |= (1 << fri1);
  }
  if (m == n * (n - 1) / 2) {
    puts("0");
    return 0;
  }
  bfs();
  int now = (1 << n) - 1, cnt = 0;
  while (~now) {
    ans[++cnt] = key[now];
    now = pre[now];
  }
  printf("%d\n", cnt);
  while (cnt) {
    printf("%d", ans[cnt--] + 1);
    if (cnt)
      printf(" ");
    else
      printf("\n");
  }
  return 0;
}
