#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
int f[1 << 23], pre[1 << 23], zt[1 << 23], tot, ans[23];
int n, fn[23], fri[23][23];
int tans[23], Ans[23][23];
void Solve(int o) {
  int ni, st = 1 << (o - 1), ed = (1 << n) - 1;
  for (int i = (1); i <= (int)(fn[o]); ++i) st |= 1 << (fri[o][i] - 1);
  memset(f, oo, sizeof(f));
  f[st] = 1;
  for (int i = (st); i <= (int)(ed); ++i) {
    if (f[i] == oo) continue;
    for (int j = (1); j <= (int)(n); ++j)
      if (i & (1 << (j - 1))) {
        ni = i;
        for (int k = (1); k <= (int)(fn[j]); ++k) ni |= 1 << (fri[j][k] - 1);
        if (f[ni] > f[i] + 1) {
          f[ni] = f[i] + 1;
          pre[ni] = i;
          zt[ni] = j;
        }
      }
  }
  int now = ed, tp = 0;
  while (now != st) {
    ans[++tp] = zt[now];
    now = pre[now];
  }
  Ans[o][tans[o] = 1] = o;
  while (tp) Ans[o][++tans[o]] = ans[tp--];
}
int main() {
  int m, u, v;
  scanf("%d%d", &n, &m);
  if (m == n * (n - 1) / 2) {
    puts("0");
    puts("");
    return 0;
  }
  int mx = 0;
  for (int i = (1); i <= (int)(m); ++i) {
    scanf("%d%d", &u, &v);
    fri[u][++fn[u]] = v;
    fri[v][++fn[v]] = u;
    mx = max(mx, max(fn[u], fn[v]));
  }
  int mn = n + 1, id;
  for (int i = (1); i <= (int)(n); ++i) {
    Solve(i);
    if (fn[i] < mx - 6) continue;
    if (tans[i] < mn) mn = tans[i], id = i;
  }
  printf("%d\n", tans[id]);
  for (int i = (1); i <= (int)(tans[id]); ++i)
    printf("%d%c", Ans[id][i], i == tans[id] ? '\n' : ' ');
  return 0;
}
