#include <bits/stdc++.h>
using namespace std;
int f[23][23], n, m, ans1, ans2, maxsta;
bool vis[1 << 23];
void dfs(int x, int sta) {
  vis[sta] = 1;
  if (x >= ans1) return;
  int flag = 1;
  for (int i = 0; i < n && flag; i++)
    if (f[x][i] != (1 << n) - 1) flag = 0;
  if (flag) {
    ans1 = x, ans2 = sta;
    return;
  } else {
    for (int i = 0; i < n; i++) {
      if (vis[sta | (1 << i)]) continue;
      for (int j = 0; j < n; j++) {
        f[x + 1][j] = ((f[x][i] >> j) & 1 ? (f[x][i] | f[x][j]) : f[x][j]);
      }
      dfs(x + 1, sta | (1 << i));
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  memset(vis, 0, sizeof(vis));
  for (int i = 0; i < n; i++) f[0][i] = (1 << i);
  for (int i = 0, x, y; i < m; i++) {
    scanf("%d%d", &x, &y);
    x--;
    y--;
    f[0][x] |= (1 << y);
    f[0][y] |= (1 << x);
  }
  ans1 = 100, ans2 = 0;
  dfs(0, 0);
  printf("%d\n", ans1);
  for (int i = 0; i < n; i++) {
    if ((ans2 >> i) & 1) {
      printf("%d", i + 1);
      ans1--;
      if (ans1 == 0)
        printf("\n");
      else
        printf(" ");
    }
  }
  return 0;
}
