#include <bits/stdc++.h>
using namespace std;
const int N = 25, MASK = (1 << 22) + 10;
int n, adj[N];
int dp[MASK];
int solve(int mask) {
  if (mask == (1 << n) - 1) return 0;
  int &ret = dp[mask];
  if (ret == -1) {
    ret = 2e9;
    for (int i = 0; i < n; i++)
      if (mask == 0 || (mask & (1 << i))) {
        if (mask != (mask | adj[i])) ret = min(ret, 1 + solve(mask | adj[i]));
      }
    assert(ret < 2e9);
  }
  return ret;
}
void rec(int mask) {
  if (mask == (1 << n) - 1) return;
  for (int i = 0; i < n; i++)
    if (mask == 0 || (mask & (1 << i))) {
      if (mask != (mask | adj[i]) && solve(mask) == 1 + solve(mask | adj[i])) {
        printf("%d ", i + 1);
        rec(mask | adj[i]);
        return;
      }
    }
}
int main() {
  int m;
  scanf("%d %d", &n, &m);
  while (m--) {
    int u, v;
    scanf("%d %d", &u, &v);
    u--, v--;
    adj[u] |= (1 << v);
    adj[v] |= (1 << u);
  }
  for (int i = 0; i < n; i++) adj[i] |= (1 << i);
  bool zero = true;
  for (int i = 0; i < n; i++) zero &= (adj[i] == (1 << n) - 1);
  if (zero) {
    printf("0\n");
    return 0;
  }
  memset(dp, -1, sizeof(dp));
  printf("%d\n", solve(0));
  rec(0);
  printf("\n");
  return 0;
}
