#include <bits/stdc++.h>
using namespace std;
const long long inf = 9.2e18;
const int maxn = 1e5 + 70;
const int INF = 2.1e9;
const int maxm = 1e6 + 70;
const int MOD = 1e9 + 7;
const double eps = 1e-7;
const double PI = acos(-1.0);
int n, m, k;
bool G[22][22], vis[22];
int a[22];
stack<pair<int, int> > S;
int ans = 30, now, goal;
void dfs(int u, int s) {
  if (s >= ans) return;
  if (now == goal) {
    if (s < ans) {
      ans = s;
      int t = 0;
      for (int i = 0; i < n; i++)
        if (vis[i]) a[t++] = i;
    }
    return;
  }
  if (u == n) return;
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    if (G[u][i]) {
      for (int j = i + 1; j < n; j++) {
        if (G[u][j] && !G[i][j]) {
          G[i][j] = G[j][i] = 1;
          S.push(make_pair(i, j));
          cnt++;
        }
      }
    }
  }
  if (cnt) {
    now += cnt;
    vis[u] = 1;
    dfs(u + 1, s + 1);
    now -= cnt;
    vis[u] = 0;
    while (cnt--) {
      int i = S.top().first, j = S.top().second;
      S.pop();
      G[i][j] = G[j][i] = 0;
    }
  }
  dfs(u + 1, s);
}
int main() {
  while (cin >> n >> m) {
    memset(G, 0, sizeof(G));
    memset(vis, 0, sizeof(vis));
    for (int i = 0; i < m; i++) {
      int u, v;
      cin >> u >> v;
      u--;
      v--;
      G[u][v] = G[v][u] = 1;
    }
    while (!S.empty()) S.pop();
    now = m;
    goal = n * (n - 1) / 2;
    dfs(0, 0);
    cout << ans << endl;
    for (int i = 0; i < ans; i++) cout << a[i] + 1 << ' ';
    cout << endl;
  }
  return 0;
}
