#include <bits/stdc++.h>
using namespace std;
int n, m;
int tr[25];
int T[1 << 23 | 1];
void add(int x, int y) { tr[x] |= (1 << y); }
int cb(int x) {
  int tot = 0;
  for (int i = 0; i < n; ++i) {
    if (x & (1 << i)) ++tot;
  }
  return tot;
}
bool getok(int x) {
  if (cb(x) == 1) return T[x] = 1;
  for (int i = 0; i < n; ++i) {
    if (!(x & (1 << i)) || !(tr[i] & x)) continue;
    int G = x - (1 << i);
    if (T[G]) return T[x] = 1;
  }
  return T[x] = 0;
}
bool J(int x) {
  int G = 0;
  for (int j = 0; j < n; ++j) {
    if (x & (1 << j)) G |= tr[j];
  }
  if (G + 1 == (1 << n) || cb(x) == 1 && (x | G) + 1 == (1 << n)) return 1;
  return 0;
}
void Out(int x) {
  int tot = cb(x);
  printf("%d\n", tot);
  for (int i = 0; i < n; ++i) {
    if (x & (1 << i)) printf("%d ", i + 1);
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, x, y; i <= m; ++i) {
    scanf("%d%d", &x, &y);
    --x, --y;
    add(x, y);
    add(y, x);
  }
  if (m == n * (n - 1) / 2) return puts("0"), 0;
  int Res = (1 << n) - 1, G = n;
  for (int i = 0; i < (1 << n); ++i) {
    if (getok(i) && J(i)) {
      if (G > cb(i)) Res = i, G = cb(Res);
    }
  }
  Out(Res);
  return 0;
}
