#include <bits/stdc++.h>
using namespace std;
int N, M, mask;
int val[22] = {}, temp[22][22];
bool best[22][1 << 22] = {};
inline bool solved() {
  int qtt = 0;
  for (int i = 0; i < N; ++i) {
    if (val[i] == mask) qtt++;
  }
  return qtt == N;
}
void print() {
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
      if (val[i] & (1 << j))
        cout << '1';
      else
        cout << '0';
    }
    cout << '\n';
  }
  cout << '\n';
}
int solve(int u, int m) {
  if (solved()) return 0;
  if (u == N) return 1000000007;
  int ans = solve(u + 1, m);
  int v = val[u];
  for (int i = 0; i < N; ++i) temp[u][i] = val[i];
  for (int i = 0; i < N; ++i)
    if (val[i] & (1 << u)) val[i] |= val[u];
  int aux = solve(u + 1, m | (1 << u)) + 1;
  if (aux < ans) {
    ans = aux;
    best[u][m] = 1;
  }
  for (int i = 0; i < N; ++i) val[i] = temp[u][i];
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> N >> M;
  mask = (1 << N) - 1;
  int u, v;
  for (int i = 0; i < N; ++i) val[i] = 1 << i;
  for (int i = 0; i < M; ++i) {
    cin >> u >> v;
    --u, --v;
    val[u] |= 1 << v;
    val[v] |= 1 << u;
  }
  solve(0, 0);
  vector<int> ans;
  u = 0;
  for (int i = 0; i < N; ++i) {
    if (best[i][u]) ans.push_back(i + 1), u |= 1 << i;
  }
  cout << ans.size() << '\n';
  for (auto it : ans) cout << it << ' ';
  cout << '\n';
}
