#include <bits/stdc++.h>
using namespace std;
const int maxn = (1 << 22) + 10;
int dp[maxn];
struct node {
  int premask;
  int preid;
} ans[maxn];
int n, m;
int mask[30];
const int inf = 0x3f3f3f3f;
int main() {
  cin >> n >> m;
  memset(dp, inf, sizeof(dp));
  for (int i = 0; i < n; i++) mask[i] |= 1 << i;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    mask[a] |= 1 << b;
    mask[b] |= 1 << a;
  }
  for (int i = 0; i <= (1 << n) - 1; i++) {
    int temp = i;
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) temp &= mask[j];
    }
    if (temp == i) {
      dp[i] = 0;
      ans[i].premask = i;
      ans[i].preid = -1;
    }
  }
  for (int i = 0; i <= (1 << n) - 1; i++) {
    for (int j = 0; j < n; j++) {
      if ((i & (1 << j)) && dp[i] + 1 < dp[i | mask[j]]) {
        dp[i | mask[j]] = dp[i] + 1;
        ans[i | mask[j]].premask = i;
        ans[i | mask[j]].preid = j;
      }
    }
  }
  printf("%d\n", dp[(1 << (n)) - 1]);
  int pre = ans[(1 << (n)) - 1].preid;
  int premask = (1 << n) - 1;
  while (pre != -1) {
    cout << pre + 1 << " ";
    premask = ans[premask].premask;
    pre = ans[premask].preid;
  }
  printf("\n");
  return 0;
}
