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