#include <bits/stdc++.h>
using namespace std;
const int N = 22;
int cache[1 << N];
int next_element[1 << N];
int already_done(const vector<int>& adj);
int memo(int set, const vector<int>& adj);
int main() {
  int n, m;
  cin >> n >> m;
  vector<int> adj(n);
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    adj[u] |= 1 << v;
    adj[v] |= 1 << u;
  }
  for (int i = 0; i < n; i++) adj[i] |= 1 << i;
  if (already_done(adj)) {
    cout << "0\n";
    return 0;
  }
  cout << memo(0, adj) << '\n';
  int set = 0;
  while (cache[set]) {
    cout << next_element[set] + 1 << ' ';
    int n = next_element[set];
    set = set | (1 << n) | adj[n];
  }
}
int already_done(const vector<int>& adj) {
  int all = (1 << adj.size()) - 1;
  for (int i = 0; i < adj.size(); i++)
    if (adj[i] != all) {
      return false;
    }
  return true;
}
int memo(int set, const vector<int>& adj) {
  if (cache[set]) return cache[set];
  int& ret = cache[set] = adj.size();
  if (set == (1 << adj.size()) - 1) return ret = 0;
  for (int i = 0; i < adj.size(); i++)
    if ((set & (1 << i)) && (set | adj[i]) != set || set == 0) {
      int next_set = set | (1 << i) | adj[i];
      int now = 1 + memo(next_set, adj);
      if (now < ret) {
        ret = now;
        next_element[set] = i;
      }
    }
  return ret;
}
