#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAX = 22;
int n, m;
int neigh[MAX];
int dp[1 << MAX];
int go(int mask) {
  if (__builtin_popcount(mask) == n) {
    return 0;
  }
  int &r = dp[mask];
  if (r == -1) {
    r = INT_MAX / 2;
    for (int i = 0; i < n; i++) {
      if ((mask >> i) & 1) {
        r = min(r, 1 + go(mask | neigh[i]));
      }
    }
  }
  return r;
}
vector<int> ans;
void build(int mask) {
  if (__builtin_popcount(mask) == n) {
    return;
  }
  int &r = dp[mask];
  for (int i = 0; i < n; i++) {
    if ((mask >> i) & 1) {
      r = min(r, 1 + go(mask | neigh[i]));
      if (r == 1 + go(mask | neigh[i])) {
        ans.push_back(i);
        build(mask | neigh[i]);
        return;
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  memset(dp, -1, sizeof dp);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    neigh[u] |= (1 << v);
    neigh[v] |= (1 << u);
    neigh[u] |= (1 << u);
    neigh[v] |= (1 << v);
  }
  if (m == (n) * (n - 1) / 2) {
    cout << 0 << '\n';
    return 0;
  }
  int mx = 0;
  for (int i = 0; i < n; i++) {
    if (go(neigh[i]) < go(neigh[mx])) {
      mx = i;
    }
  }
  cout << 1 + go(neigh[mx]) << '\n';
  ans.push_back(mx);
  build(neigh[mx]);
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i] + 1 << " ";
  }
}
