#include <bits/stdc++.h>
using namespace std;
int a[22 + 10], dp[(1 << 22) + 10], que[(1 << 22) + 10], path[(1 << 22) + 10],
    INF;
inline int read() {
  int f = 1, x = 0;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') {
      f = -1;
      break;
    }
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + ch - '0';
    ch = getchar();
  }
  return f * x;
}
void get_path(int x) {
  if (path[x]) get_path(path[x]);
  printf("%d ", que[x]);
}
int main() {
  memset(dp, 0x5f, sizeof(dp));
  INF = dp[0];
  int n = read(), m = read();
  if (m * 2 == n * (n - 1)) {
    printf("0\n");
    return 0;
  }
  for (int i = 1; i <= n; i++) a[i] = 1 << (i - 1);
  for (int i = 1; i <= m; i++) {
    int x = read(), y = read();
    if (x != y) a[x] |= 1 << (y - 1), a[y] |= 1 << (x - 1);
  }
  for (int i = 1; i <= n; i++) dp[a[i]] = 1, que[a[i]] = i;
  for (int i = 0; i < (1 << n); i++) {
    if (dp[i] == INF) continue;
    for (int j = 1; j <= n; j++) {
      if ((i & (1 << (j - 1))) && dp[i | a[j]] > dp[i] + 1) {
        dp[i | a[j]] = dp[i] + 1, que[i | a[j]] = j, path[i | a[j]] = i;
      }
    }
  }
  printf("%d\n", dp[(1 << n) - 1]);
  get_path((1 << n) - 1);
  printf("\n");
  return 0;
}
