#include <bits/stdc++.h>
using namespace std;
int n, m, cnt, vis[1 << 22], prg[1 << 22];
int nxt[1 << 22], num[22], ans[22];
void init() {
  for (int i = 0; i < n; ++i) num[i] |= (1 << i);
}
void reads() {
  memset(nxt, -1, sizeof nxt);
  int l, r;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < m; ++i) {
    scanf("%d %d", &l, &r);
    num[l - 1] |= (1 << (r - 1));
    num[r - 1] |= (1 << (l - 1));
  }
}
queue<int> q;
void bfs() {
  for (int i = 0; i < n; ++i) {
    vis[num[i]] = 1;
    prg[num[i]] = i;
    q.push(num[i]);
  }
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 0; i < n; ++i) {
      if (!(u & (1 << i))) continue;
      int v = u | num[i];
      if (vis[v]) continue;
      vis[v] = 1;
      nxt[v] = u;
      prg[v] = i;
      if (v == ((1 << n) - 1)) return;
      q.push(v);
    }
  }
}
void backward() {
  int now = (1 << n) - 1;
  if (m == n * (n - 1) / 2) {
    printf("0");
    return;
  }
  while (now > 0) {
    ans[++cnt] = prg[now];
    now = nxt[now];
  }
  printf("%d\n", cnt);
  while (cnt > 0) {
    printf("%d ", ans[cnt--] + 1);
  }
}
int main() {
  reads();
  init();
  bfs();
  backward();
  return 0;
}
