#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > adj;
map<int, int> myMap;
map<int, int> nextState;
map<int, int> nextMove;
int n;
int dp(int state) {
  if (myMap.find(state) != myMap.end()) return myMap[state];
  if (state == ((1 << n) - 1)) {
    myMap[state] = 0;
    nextState[state] = -1;
    nextMove[state] = -1;
    return myMap[state];
  }
  myMap[state] = 30;
  for (int i = 0; i < n; i++) {
    if ((state & (1 << i)) != 0 || (state == 0)) {
      int temp = state | (1 << i);
      for (int j = 0; j < adj[i].size(); j++) {
        int v = adj[i][j];
        temp = (temp | (1 << v));
      }
      int claim = 1 + dp(temp);
      if (myMap[state] > claim) {
        myMap[state] = claim;
        nextState[state] = temp;
        nextMove[state] = i;
      }
    }
  }
  return myMap[state];
}
int main() {
  int m;
  cin >> n >> m;
  adj.clear();
  adj.resize(n);
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  myMap.clear();
  nextState.clear();
  nextMove.clear();
  if (n <= 2 || m == (n * (n - 1)) / 2) {
    cout << 0 << endl;
  } else {
    int ans = dp(0);
    cout << ans << endl;
    int state = 0;
    while (true) {
      if (nextState[state] == -1) break;
      cout << nextMove[state] + 1 << " ";
      state = nextState[state];
    }
    cout << endl;
  }
  return 0;
}
