#include <bits/stdc++.h>
using namespace std;
const int N = 22;
int n, m, gm[N];
vector<int> g[N];
void read() {
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    g[u].push_back(v);
    g[v].push_back(u);
    gm[u] |= (1 << v);
    gm[v] |= (1 << u);
  }
}
int ans = (1 << N) - 1;
bool check(int mask) {
  for (int u = 0; u < n; ++u) {
    if ((mask >> u) & 1) {
      continue;
    }
    if ((gm[u] & mask) == 0) {
      return false;
    }
  }
  return true;
}
int dp[1 << N];
int unicheck(int mask) {
  int& res = dp[mask];
  if (res != -1) {
    return res;
  }
  res = 0;
  if (__builtin_popcount(mask) < 2) {
    return res = 1;
  }
  for (int i = 0; i < n; ++i) {
    if ((mask >> i) & 1) {
      res = max(res, int(unicheck(mask ^ (1 << i)) && (gm[i] & mask)));
    }
  }
  return res;
}
void calc(int mask, int num = 0, bool comp = false) {
  if (num == n) {
    if (__builtin_popcount(mask) < __builtin_popcount(ans) && comp &&
        check(mask)) {
      ans = mask;
    }
    return;
  }
  calc(mask, num + 1, comp);
  calc(mask | (1 << num), num + 1, unicheck(mask | (1 << num)));
}
void solve() {
  read();
  if (n == 1 || (n - 1) * n / 2 == m) {
    cout << "0\n";
    return;
  }
  memset(dp, -1, sizeof dp);
  calc(0);
  cout << __builtin_popcount(ans) << "\n";
  for (int i = 0; i < n; ++i) {
    if ((ans >> i) & 1) {
      cout << i + 1 << " ";
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cout.tie(0), cin.tie(0);
  solve();
  return 0;
}
