#include <bits/stdc++.h>
using namespace std;
int f[10000050], pre[10000050], used[10000050], edge[105];
vector<int> vec;
int main() {
  int n, m, i, j, x, y, maxi, size, news;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    edge[x] |= 1 << y;
    edge[y] |= 1 << x;
  }
  memset(f, 127, sizeof(f));
  for (i = 1; i <= n; i++) f[1 << i] = 0;
  maxi = 0;
  for (i = 1; i <= n; i++) maxi |= 1 << i;
  for (i = 0; i <= maxi; i++)
    if (f[i] < 999999999) {
      for (j = 1; j <= n; j++)
        if ((1 << j) & i) {
          news = i | edge[j];
          if (f[i] + 1 < f[news]) {
            f[news] = f[i] + 1;
            used[news] = j;
            pre[news] = i;
          }
        } else if ((i & edge[j]) == i) {
          news = i | (1 << j);
          if (f[i] < f[news]) {
            f[news] = f[i];
            used[news] = 0;
            pre[news] = i;
          }
        }
    }
  vec.clear();
  for (i = maxi; (i & -i) != i; i = pre[i])
    if (used[i]) vec.push_back(used[i]);
  size = vec.size();
  printf("%d\n", size);
  for (i = size - 1; i >= 0; i--) printf("%d ", vec[i]);
  printf("\n");
  return 0;
}
