#include <bits/stdc++.h>
using namespace std;
stack<int> stk, ans;
const int maxn = 25;
int n, m, u, v;
long long dp[maxn][maxn];
void dfs(int x) {
  if (stk.size() >= ans.size()) return;
  if (x == n) {
    for (int i = 0; i < n; i++) {
      if (dp[x][i] != (1 << n) - 1) return;
    }
    ans = stk;
    return;
  }
  memcpy(dp[x + 1], dp[x], sizeof(dp[x]));
  dfs(x + 1);
  for (int i = 0; i < n; i++) {
    if (dp[x][x] & (1 << i)) dp[x + 1][i] |= dp[x][x];
  }
  stk.push(x);
  dfs(x + 1);
  stk.pop();
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    ans.push(i);
    dp[0][i] = 1 << i;
  }
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &u, &v);
    u--;
    v--;
    dp[0][u] |= 1 << v;
    dp[0][v] |= 1 << u;
  }
  dfs(0);
  printf("%d\n", ans.size());
  while (!ans.empty()) {
    printf("%d ", ans.top() + 1);
    ans.pop();
  }
}
