#include <bits/stdc++.h>
using namespace std;
const int N = 25;
int mig[N], n;
int memo[(1 << N)];
int solve(int mask) {
  if (mask == (1 << n) - 1) return 1;
  if (memo[mask] != -1) return memo[mask];
  int ans = 0x3F3F3F3F;
  for (int i = 0; i < n; i++) {
    if (mask & (1 << i) && ((mask & mig[i]) != mig[i])) {
      ans = min(ans, solve(mask | mig[i]) + 1);
    }
  }
  return memo[mask] = ans;
}
void print(int mask) {
  if (mask == (1 << n) - 1) return;
  for (int i = 0; i < n; i++) {
    if (mask & (1 << i)) {
      if (mask & (1 << i) && ((mask & mig[i]) != mig[i]) &&
          memo[mask] == solve(mask | mig[i]) + 1) {
        printf(" %d", i + 1);
        print(mask | mig[i]);
        return;
      }
    }
  }
  return;
}
int main() {
  int m;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) mig[i] |= (1 << i);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    u--, v--;
    mig[u] |= (1 << v);
    mig[v] |= (1 << u);
  }
  if (m == (n * (n - 1)) / 2) {
    puts("0");
    return 0;
  }
  memset(memo, -1, sizeof memo);
  int qtd = 0x3F3F3F3F;
  for (int i = 0; i < n; i++) {
    qtd = min(qtd, solve(mig[i]));
  }
  printf("%d\n", qtd);
  for (int i = 0; i < n; i++) {
    if (qtd == solve(mig[i])) {
      printf("%d", i + 1);
      print(mig[i]);
      break;
    }
  }
  printf("\n");
}
