#include <bits/stdc++.h>
using namespace std;
const int maxn = 25;
const int inf = 0x3f3f3f3f;
vector<int> G[maxn];
int n, m, q[maxn];
bool seen[maxn];
bool bfs(int start, int mask) {
  int node, left, right;
  left = right = 0;
  seen[start] = 1;
  for (int son : G[start]) q[right++] = son, seen[son] = 1;
  while (left < right) {
    node = q[left++];
    if (mask & (1 << node)) {
      for (int son : G[node])
        if (!seen[son]) seen[son] = 1, q[right++] = son;
    }
  }
  for (int node = 0; node < n; node++)
    if (node != start && seen[node] == 0) return false;
  return true;
}
bool ok(int mask) {
  int f = 1;
  for (int i = 0; i < n && f; i++) {
    memset(seen, 0, sizeof seen);
    f = bfs(i, mask);
  }
  return f;
}
int numberOfBytes(int mask) {
  int nr = 0;
  for (int byte = 0; byte < n; byte++)
    if (mask & (1 << byte)) nr++;
  return nr;
}
int main() {
  int x, y;
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    cin >> x >> y;
    x--;
    y--;
    G[x].push_back(y);
    G[y].push_back(x);
  }
  int found = 1;
  for (int i = 0; i < n; i++)
    if (G[i].size() < n - 1) found = 0;
  if (found) {
    cout << "0";
    return 0;
  }
  int bestMask, answer = inf, limit = (1 << n), a;
  for (int mask = 1; mask < limit; mask++) {
    a = numberOfBytes(mask);
    if (a < answer && ok(mask)) {
      answer = a;
      bestMask = mask;
    }
  }
  cout << answer << '\n';
  for (int i = 0; i < n; i++)
    if (bestMask & (1 << i)) cout << i + 1 << ' ';
  return 0;
}
