#include <bits/stdc++.h>
using namespace std;
int n, m;
int fr[25];
int dp[1 << 22];
int idx;
int solve(int mask) {
  if (mask == (1 << n) - 1) return 0;
  int& ret = dp[mask];
  if (~ret) return ret;
  ret = 1e9;
  for (int i = 0; i < n; ++i) {
    if (i == idx || !(mask & (1 << i))) continue;
    if ((mask | fr[i]) == mask) continue;
    ret = min(ret, solve(mask | fr[i]) + 1);
  }
  return ret;
}
void print(int mask) {
  if (mask == (1 << n) - 1) return;
  int ret = dp[mask];
  for (int i = 0; i < n; ++i) {
    if (i == idx || !(mask & (1 << i))) continue;
    if ((mask | fr[i]) == mask) continue;
    if (ret == solve(mask | fr[i]) + 1) {
      printf("%d ", i + 1);
      print(mask | fr[i]);
      return;
    }
  }
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    fr[a] |= (1 << b);
    fr[b] |= (1 << a);
  }
  if (m == n * (n - 1) / 2) return puts("0");
  for (int i = 0; i < n; ++i) fr[i] |= (1 << i);
  int ans = 10000, a;
  memset(dp, -1, sizeof dp);
  for (int i = 0; i < n; ++i) {
    idx = i;
    memset(dp, -1, sizeof dp);
    int x = solve(fr[i]);
    if (x < ans) {
      ans = x;
      a = i;
    }
  }
  idx = a;
  cout << solve(fr[idx]) + 1 << endl;
  print(fr[idx]);
  cout << idx + 1 << endl;
  return 0;
}
