#include <bits/stdc++.h>
int CH, NEG;
template <typename TP>
inline void read(TP& ret) {
  ret = NEG = 0;
  while (CH = getchar(), CH < '!')
    ;
  if (CH == '-') NEG = true, CH = getchar();
  while (ret = ret * 10 + CH - '0', CH = getchar(), CH > '!')
    ;
  if (NEG) ret = -ret;
}
int n, m;
int g[22];
int dis[(1 << 22)];
int pre[(1 << 22)], intro[(1 << 22)];
std::queue<int> q;
void bfs() {
  int s, t;
  for (int i = (0); i < (n); i++) dis[g[i]] = 1, q.push(g[i]), intro[g[i]] = i;
  while (!q.empty()) {
    s = q.front(), q.pop();
    for (int i = (0); i < (n); i++)
      if ((s >> i) & 1) {
        t = s | g[i];
        if (!dis[t]) {
          dis[t] = dis[s] + 1;
          intro[t] = i;
          pre[t] = s;
          if (t + 1 == (1 << n)) return;
          q.push(t);
        }
      }
  }
}
std::vector<int> ans;
int main() {
  int i, j, k;
  read(n), read(m);
  for (i = (0); i < (n); i++) g[i] |= (1 << i);
  for (i = (1); i <= (m); i++) {
    read(j), read(k);
    j--, k--;
    g[j] |= (1 << k);
    g[k] |= (1 << j);
  }
  if (m == n * (n - 1) / 2) {
    puts("0");
    goto END;
  }
  bfs();
  k = (1 << n) - 1;
  while (k) {
    ans.push_back(intro[k]), k = pre[k];
  }
  printf("%d\n", ans.size());
  for (i = (ans.size() - 1); i >= (0); i--) printf("%d ", ans[i] + 1);
END:
  getchar(), getchar();
  return 0;
}
