#include <bits/stdc++.h>
using namespace std;
const int mod = (1e9) + 7;
const int siz = (1e5) + 100;
int n, m;
int adj[30];
bool connected[(int)5e6];
int mn[(int)5e6];
int best = INT_MAX, ansm = 0;
int bits(int v) {
  int ret = 0;
  while (v != 0) {
    if (v & 1 == 1) ret++;
    v >>= 1;
  }
  return ret;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    adj[a] |= (1 << b);
    adj[b] |= (1 << a);
  }
  if (m == 0 || m == (n * (n - 1)) / 2) {
    printf("0\n");
    return 0;
  }
  for (int i = 0; i < n; i++) {
    adj[i] |= (1 << i);
  }
  for (int i = 0; i < n; i++) {
    connected[1 << i] = 1;
  }
  for (int mask = 0; mask < (1 << n); mask++) {
    if (!connected[mask]) continue;
    for (int i = 0; i < n; i++) {
      if (mask & (1 << i)) {
        mn[mask] |= adj[i];
      }
    }
    int b = bits(mask);
    if (mn[mask] == (1 << n) - 1 && b < best) {
      best = b;
      ansm = mask;
    }
    for (int i = 0; i < n; i++) {
      if (mn[mask] & (1 << i) && !connected[mask | (1 << i)]) {
        connected[mask | (1 << i)] = 1;
      }
    }
  }
  printf("%d\n", best);
  bool fir = true;
  for (int i = 0; i < n; i++) {
    if (ansm & (1 << i)) {
      if (fir) {
        fir = false;
        printf("%d", i + 1);
      } else
        printf(" %d", i + 1);
    }
  }
  printf("\n");
  return 0;
}
