#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T a) {
  return ((a < 0) ? -a : a);
}
template <typename T>
inline T sqr(T a) {
  return a * a;
}
template <class T>
T gcd(T a, T b) {
  return a ? gcd(b % a, a) : b;
}
template <class T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <class T>
T sign(T a) {
  return a > 0 ? 1 : (a < 0 ? -1 : 0);
}
template <class A, class B>
ostream &operator<<(ostream &out, const pair<A, B> &p) {
  return out << "(" << p.first << ", " << p.second << ")";
};
template <class A>
ostream &operator<<(ostream &out, const vector<A> &v) {
  out << "[";
  for (int i = int(0); i < int(int((v).size())); i++) {
    if (i) out << ", ";
    out << v[i];
  }
  return out << "]";
}
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
const int dxK[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dyK[] = {0, 1, 1, 1, 0, -1, -1, -1};
const int dxKn[] = {-2, -1, 1, 2, 2, 1, -1, -2};
const int dyKn[] = {1, 2, 2, 1, -1, -2, -2, -1};
const int INF = int(1e9) + 100;
const long long INF64 = int(1e18) + 100;
const long double EPS = 1e-9;
const long double PI = acosl(-1.0);
const int N = 23;
int n, m;
int msk[1 << N];
int dp[1 << N];
pair<int, int> p[1 << N];
inline bool read() {
  if (!(cin >> n >> m)) return false;
  for (int i = int(0); i < int(m); i++) {
    int a, b;
    cin >> a >> b;
    --a, --b;
    msk[a] |= 1 << b;
    msk[b] |= 1 << a;
  }
  return true;
}
inline int cntBit(int first) {
  int res = 0;
  for (int i = int(0); i < int(24); i++) res += (first & (1 << i)) > 0;
  return res;
}
inline void solve() {
  if (m == n * (n - 1) / 2) {
    puts("0");
    return;
  }
  for (int i = int(0); i < int(n); i++) msk[i] |= 1 << i;
  memset(dp, 63, sizeof dp);
  for (int i = int(0); i < int(n); i++) dp[1 << i] = 0;
  for (int curMsk = int(0); curMsk < int(1 << n); curMsk++) {
    int cur = dp[curMsk];
    if (cur > 100) continue;
    for (int i = int(0); i < int(n); i++)
      if ((curMsk >> i) & 1) {
        if (dp[curMsk | msk[i]] > cur + 1) {
          dp[curMsk | msk[i]] = cur + 1;
          p[curMsk | msk[i]] = make_pair(curMsk, i);
        }
      }
  }
  assert(dp[(1 << n) - 1] < 100);
  int curMsk = (1 << n) - 1;
  vector<int> ans;
  while (curMsk & (curMsk - 1)) {
    int pMsk = p[curMsk].first;
    ans.push_back(p[curMsk].second);
    curMsk = pMsk;
  }
  cout << int((ans).size()) << endl;
  for (int i = int(int((ans).size())) - 1; i >= 0; --i)
    cout << ans[i] + 1 << ' ';
}
int main() {
  cout << fixed << setprecision(15);
  cerr << fixed << setprecision(15);
  while (read()) {
    solve();
  }
  return 0;
}
