#include <bits/stdc++.h>
struct state {
  int friends;
  std::vector<int> path;
  state(int friends, std::vector<int> path) : friends(friends), path(path) {}
};
std::vector<int> friends[23];
std::queue<state> states;
int seen[1 << 22] = {};
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  int goal = (1 << n) - 1;
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    friends[a].push_back(b);
    friends[b].push_back(a);
  }
  for (int i = 0; i < n; i++) {
    states.push(state(1 << i, std::vector<int>()));
  }
  if (m == (n * (n - 1) / 2)) {
    printf("0\n");
    return 0;
  }
  while (!states.empty()) {
    state s = states.front();
    states.pop();
    if (s.friends == goal) {
      printf("%d\n", s.path.size());
      for (int i = 0; i < s.path.size(); i++) {
        printf("%d ", s.path[i]);
      }
      return 0;
    }
    if (!seen[s.friends]) {
      for (int i1 = 1; i1 <= n; i1++) {
        if (s.friends & (1 << (i1 - 1))) {
          int nextFriends = s.friends;
          for (int i2 = 0; i2 < friends[i1].size(); i2++) {
            nextFriends |= 1 << (friends[i1][i2] - 1);
          }
          s.path.push_back(i1);
          states.push(state(nextFriends, std::vector<int>(s.path)));
          s.path.pop_back();
        }
      }
      seen[s.friends] = 1;
    }
  }
  throw "";
  return 0;
}
