#include <bits/stdc++.h>
const int INF = 2000000005;
const long long BIG_INF = 2000000000000000005;
const int mod = 1000000007;
const int P = 31;
const long double PI = 3.141592653589793238462643;
const double eps = 1e-9;
using namespace std;
vector<pair<int, int> > dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
bool valid(int x, int y, int n, int m) {
  return x >= 0 && y >= 0 && x < n && y < m;
}
mt19937 rng(1999999973);
const int N = 23;
int dp[1 << 23], p[1 << 23], d[1 << 23], smej[N], n, m;
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> m;
  if (m == n * (n - 1) / 2) {
    cout << 0;
    return 0;
  }
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    u--, v--;
    smej[u] |= (1 << v);
    smej[v] |= (1 << u);
  }
  for (int i = 0; i < (1 << 23); i++) dp[i] = INF;
  for (int i = 0; i < n; i++) {
    dp[smej[i] | (1 << i)] = 1;
    p[smej[i] | (1 << i)] = 0;
    d[smej[i] | (1 << i)] = i;
  }
  for (int mask = 0; mask < (1 << n); mask++) {
    int cur = mask;
    while (cur > 0) {
      if (dp[mask | smej[__builtin_ctz(cur)]] > dp[mask] + 1) {
        dp[mask | smej[__builtin_ctz(cur)]] = dp[mask] + 1;
        p[mask | smej[__builtin_ctz(cur)]] = mask;
        d[mask | smej[__builtin_ctz(cur)]] = __builtin_ctz(cur);
      }
      cur &= cur - 1;
    }
  }
  cout << dp[(1 << n) - 1] << '\n';
  int cur = (1 << n) - 1;
  vector<int> ans;
  while (cur != 0) {
    ans.push_back(d[cur] + 1);
    cur = p[cur];
  }
  reverse(ans.begin(), ans.end());
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  return 0;
}
