#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <class T, class U>
using Pa = pair<T, U>;
template <class T>
using vec = vector<T>;
template <class T>
using vvec = vector<vec<T>>;
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int N, M;
  cin >> N >> M;
  vec<int> A(N);
  vvec<int> E(N, vec<int>(N));
  for (int i = 0; i < M; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    E[a][b] = 1;
    A[a] |= (1 << b);
    A[b] |= (1 << a);
  }
  for (int i = 0; i < N; i++) A[i] |= 1 << i;
  int inf = 1e9;
  vec<int> dp(1 << N, inf);
  for (int S = 1; S < (1 << N); S++) {
    bool ok = true;
    for (int i = 0; i < N; i++)
      if (S >> i & 1) {
        if ((A[i] & S) != S) ok = false;
      }
    if (ok) dp[S] = 0;
  }
  struct P {
    int S, t;
  };
  vec<P> pre(1 << N);
  for (int S = 1; S < (1 << N); S++) {
    for (int i = 0; i < N; i++)
      if (S >> i & 1) {
        int T = S | A[i];
        if (dp[T] > dp[S] + 1) {
          dp[T] = dp[S] + 1;
          pre[T] = {S, i};
        }
      }
  }
  int ans = dp[(1 << N) - 1];
  vec<int> res;
  int now = (1 << N) - 1;
  for (int _ = 0; _ < ans; _++) {
    res.push_back(pre[now].t);
    now = pre[now].S;
  }
  reverse(res.begin(), res.end());
  cout << ans << "\n";
  for (auto& x : res) cout << x + 1 << " ";
  cout << "\n";
}
