#include <bits/stdc++.h>
using namespace std;
int n, m, friends[22];
tuple<int, int, int> dp[1 << 22];
bool isClique(int mask) {
  int temp = mask;
  while (temp > 0) {
    int k = temp & -temp;
    if ((friends[__builtin_ctz(k)] & mask) != mask) return false;
    temp ^= k;
  }
  return true;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 0; i < (n); i++) friends[i] |= (1 << i);
  for (int i = 0; i < (m); i++) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    friends[a] |= (1 << b), friends[b] |= (1 << a);
  }
  for (int i = 0; i < (1 << n); i++) dp[i] = make_tuple(INT_MAX, 0, 0);
  for (int i = 0; i < (1 << n); i++)
    if (isClique(i)) get<0>(dp[i]) = 0;
  for (int i = 0; i < (1 << n); i++) {
    if (get<0>(dp[i]) == INT_MAX) continue;
    int temp = i;
    while (temp > 0) {
      int k = __builtin_ctz(temp & -temp);
      dp[i | friends[k]] =
          min(dp[i | friends[k]], make_tuple(get<0>(dp[i]) + 1, i, k));
      temp ^= (1 << k);
    }
  }
  cout << get<0>(dp[(1 << n) - 1]) << "\n";
  int curr = (1 << n) - 1;
  while (get<0>(dp[curr]) > 0) {
    cout << get<2>(dp[curr]) + 1;
    if (get<0>(dp[curr]) > 1)
      cout << " ";
    else
      cout << "\n";
    curr = get<1>(dp[curr]);
  }
  return 0;
}
