#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void Max(T &x, T t) {
  if (t > x) {
    x = t;
  }
}
template <class T>
inline void Min(T &x, T t) {
  if (t < x) {
    x = t;
  }
}
const long double PI = acos(0.0) * 2;
const int maxn = 22 + 1;
int N, M, S[maxn], dp[1 << maxn], ps[1 << maxn], p[1 << maxn];
inline void upd(int mask, int cost, int pmask, int px) {
  if (cost < dp[mask]) {
    dp[mask] = cost;
    ps[mask] = pmask;
    p[mask] = px;
  }
}
int main() {
  cin >> N >> M;
  for (int i = 0; i < N; i++) {
    S[i] = 1 << i;
  }
  for (int mask = (1 << N) - 1; mask >= 0; mask--) {
    dp[mask] = N;
  }
  while (M--) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--;
    v--;
    S[u] |= 1 << v;
    S[v] |= 1 << u;
  }
  for (int i = 0; i < N; i++) {
    int cost = 0;
    for (int j = 0; j < N; j++) {
      if (((1 << j) & S[i]) && (S[i] | S[j]) != S[j]) {
        cost = 1;
      }
    }
    upd(S[i], cost, 0, i);
  }
  for (int mask = 0; mask < (1 << N); mask++) {
    for (int j = 0; j < N; j++) {
      if ((1 << j) & mask) {
        upd(mask | S[j], dp[mask] + 1, mask, j);
      }
    }
  }
  cout << dp[(1 << N) - 1] << endl;
  for (int mask = (1 << N) - 1; dp[mask] && mask; mask = ps[mask]) {
    cout << p[mask] + 1 << ' ';
  }
  return 0;
}
