#include <bits/stdc++.h>
using namespace std;
int dp[5 * 1000007], fr[30];
int tot, n, m;
bool on(int mask, int x) { return (mask & (1 << x)) == (1 << x); }
bool in(int mask, int x) { return (mask & fr[x]) == fr[x]; }
int go(int mask) {
  if (mask == tot) return 0;
  int &ret = dp[mask];
  if (ret != -1) return ret;
  ret = 0x3f3f3f3f;
  for (int i = 0; i < n; i++) {
    if (on(mask, i) and !in(mask, i)) {
      ret = min(ret, go(mask | fr[i]) + 1);
    }
  }
  return ret;
}
void print(int mask) {
  if (mask == tot) return;
  int guy, ret = 0x3f3f3f3f;
  for (int i = 0; i < n; i++) {
    if (on(mask, i) and !in(mask, i)) {
      if (ret > go(mask | fr[i]) + 1) {
        ret = go(mask | fr[i]) + 1;
        guy = i;
      }
    }
  }
  cout << guy + 1 << " ";
  print(mask | fr[guy]);
}
int main(int argc, char const *argv[]) {
  memset(dp, -1, sizeof dp);
  cin >> n >> m;
  tot = (1 << n) - 1;
  if (m == n * (n - 1) / 2) {
    cout << 0 << endl;
    return 0;
  }
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    fr[a] += (1 << b);
    fr[b] += (1 << a);
  }
  int ans = 0x3f3f3f3f, st;
  for (int i = 0; i < n; i++) {
    if (ans > go(1 << i)) {
      ans = go(1 << i);
      st = i;
    }
  }
  cout << ans << endl;
  print(1 << st);
  return 0;
}
