#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 7;
const int maxn = (1 << 22) + 5;
int n, m;
int dp[maxn], a[maxn];
vector<int> g[maxn];
pair<int, int> pre[maxn];
int main() {
  int u, v;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) a[i] |= (1 << i);
  for (int i = 1; i <= m; i++)
    scanf("%d%d", &u, &v), u--, v--, a[u] |= (1 << v), a[v] |= (1 << u);
  for (int i = 0; i < (1 << n); i++) dp[i] = inf;
  dp[0] = 0;
  for (int i = 0; i < n; i++) {
    dp[a[i]] = 1;
    bool ok = true;
    for (int j = 0; j < n; j++) {
      if (a[i] & (1 << j)) {
        if ((a[i] & a[j]) != a[i]) ok = false;
      }
    }
    if (ok) dp[a[i]] = 0;
    pre[a[i]] = pair<int, int>(0, i);
  }
  for (int i = 0; i < (1 << n); i++) {
    if (dp[i] == inf) continue;
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) {
        int t = i | a[j];
        if (dp[t] > dp[i] + 1) dp[t] = dp[i] + 1, pre[t] = pair<int, int>(i, j);
      }
    }
  }
  printf("%d\n", dp[(1 << n) - 1]);
  int j = (1 << n) - 1;
  vector<int> ans;
  while (dp[j]) {
    ans.push_back(pre[j].second);
    j = pre[j].first;
  }
  for (int i = ans.size() - 1; i >= 0; i--) printf("%d ", ans[i] + 1);
  return 0;
}
