#include <bits/stdc++.h>
using namespace std;
using K = long double;
using ll = long long;
const int N = 22;
const int inf = 1000 * 1000 * 1000 + 7;
int n, m;
int f[(1 << N) + 3], prv[(1 << N) + 3], ver[(1 << N) + 3];
int mask[N];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  if (n * (n - 1) == m * 2) {
    cout << 0 << '\n';
    return 0;
  }
  for (int i = 0; i < (1 << n); ++i) f[i] = inf;
  for (int i = 0; i < (n); ++i) mask[i] |= 1 << i;
  queue<int> q;
  for (int i = 0; i < (m); ++i) {
    int x, y;
    cin >> x >> y;
    --x;
    --y;
    mask[x] |= 1 << y;
    mask[y] |= 1 << x;
  }
  for (int i = 0; i < (n); ++i)
    q.push(mask[i]), f[mask[i]] = 0, prv[mask[i]] = -1, ver[mask[i]] = i;
  while (!q.empty()) {
    auto now = q.front();
    q.pop();
    for (int i = 0; i < (n); ++i)
      if (now & (1 << i)) {
        int cur = mask[i] | now;
        if (f[cur] > f[now] + 1) {
          f[cur] = f[now] + 1;
          prv[cur] = now;
          ver[cur] = i;
          q.push(cur);
        }
      }
  }
  int mask = (1 << n) - 1;
  cout << f[(1 << n) - 1] + 1 << '\n';
  vector<int> path;
  while (prv[mask] != -1) {
    path.push_back(ver[mask]);
    mask = prv[mask];
  }
  path.push_back(ver[mask]);
  reverse(path.begin(), path.end());
  for (auto& v : path) {
    cout << v + 1 << ' ';
  }
  cout << '\n';
  return 0;
}
