#include <bits/stdc++.h>
using namespace std;
const int N = 25, STA = (1 << 22) + 10;
const int INF = 0x3f3f3f3f;
int n, m, c[N];
int f[STA], pre[STA], now[STA], ans[N], top;
int main() {
  scanf("%d%d", &n, &m);
  if (m == (n - 1) * n / 2) {
    printf("0");
    return 0;
  }
  for (int i = 1; i <= n; ++i) c[i] |= (1 << (i - 1));
  for (int i = 1, x, y; i <= m; ++i) {
    scanf("%d%d", &x, &y);
    c[x] |= (1 << (y - 1));
    c[y] |= (1 << (x - 1));
  }
  memset(f, 0x3f, sizeof(f));
  int S = (1 << n) - 1;
  for (int i = 1; i <= n; ++i) f[c[i]] = 1, now[c[i]] = i;
  for (int s = 0; s <= S; ++s) {
    if (f[s] == INF) continue;
    for (int i = 1; i <= n; ++i) {
      if ((s & (1 << (i - 1))) && f[s | c[i]] > f[s] + 1) {
        f[s | c[i]] = f[s] + 1;
        pre[s | c[i]] = s;
        now[s | c[i]] = i;
      }
    }
  }
  printf("%d\n", f[S]);
  while (S) {
    ans[++top] = now[S];
    S = pre[S];
  }
  while (top) printf("%d ", ans[top--]);
  return 0;
}
