#include <bits/stdc++.h>
template <class T>
inline bool cmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
template <class T>
inline bool cmin(T& a, const T& b) {
  return a > b ? a = b, 1 : 0;
}
using namespace std;
const int N = 25, S = (1 << 22) + 5, Inf = 1e9;
int n, m, All, Ans, r[N], f[S];
int dp(int s) {
  if (~f[s]) return f[s];
  int Tmp = f[s] = Inf;
  for (int i = 0, iend = (n - 1) + 1; i < iend; ++i)
    if (s & (1 << i)) cmin(Tmp, 1 + dp(s | r[i]));
  return f[s] = Tmp;
}
void dfs(int s) {
  if (!f[s]) return;
  for (int i = 0, iend = (n - 1) + 1; i < iend; ++i)
    if (s & (1 << i) && f[s] == 1 + f[s | r[i]])
      return printf("%d ", i + 1), dfs(s | r[i]);
}
inline void Solve() {
  All = (1 << n) - 1;
  for (int x, y, i = 1; i <= m; ++i)
    scanf("%d%d", &x, &y), r[x - 1] |= 1 << (y - 1), r[y - 1] |= 1 << (x - 1);
  if (m == (n - 1) * n / 2) return (void)puts("0");
  fill(f, f + All + 1, -1);
  f[All] = 0, Ans = Inf;
  for (int i = 0, iend = (n - 1) + 1; i < iend; ++i) cmin(Ans, dp(1 << i));
  printf("%d\n", Ans);
  for (int i = 0, iend = (n - 1) + 1; i < iend; ++i)
    if (f[1 << i] == Ans) return dfs(1 << i);
}
int main() {
  while (~scanf("%d%d", &n, &m)) Solve();
  return 0;
}
