#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const int INF = 1000 * 1000 * 1000 + 7;
const long long LINF = INF * (long long)INF;
const int L = 22;
int G[L];
int dp[1 << L];
int P[1 << L];
int M[1 << L];
int n;
void print(int mask) {
  for (int i = (0); i < (n); i++) {
    if (mask & (1 << i)) {
      cout << "1 ";
      continue;
    }
    cout << "0 ";
  }
  cout << endl;
}
bool isClik(int mask) {
  for (int i = (0); i < (n); i++) {
    if ((1 << i) & mask) {
      mask ^= 1 << i;
      if ((mask & G[i]) != mask) return false;
      mask ^= 1 << i;
    }
  }
  return true;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int m;
  cin >> n >> m;
  for (int i = (0); i < (m); i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    G[a] |= 1 << b;
    G[b] |= 1 << a;
  }
  for (int mask = (0); mask < (1 << n); mask++) {
    dp[mask] = INF;
  }
  for (int mask = (0); mask < (1 << n); mask++) {
    if (isClik(mask)) {
      dp[mask] = 0;
    }
  }
  for (int mask = (0); mask < (1 << n); mask++) {
    for (int k = (0); k < (n); k++) {
      if (!(mask & (1 << k))) continue;
      if (dp[mask | G[k]] > dp[mask] + 1) {
        dp[mask | G[k]] = dp[mask] + 1;
        P[mask | G[k]] = k;
        M[mask | G[k]] = mask;
      }
      dp[mask | G[k]] = min(dp[mask | G[k]], dp[mask] + 1);
    }
  }
  int ans = dp[(1 << n) - 1];
  cout << ans << endl;
  vector<int> res;
  int mask = (1 << n) - 1;
  for (int i = (0); i < (ans); i++) {
    res.push_back(P[mask]);
    mask = M[mask];
  }
  reverse(res.begin(), res.end());
  for (int i = (0); i < ((int)res.size()); i++) {
    cout << res[i] + 1 << " ";
  }
  cout << endl;
}
