#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int maxn = 1e5 + 5;
int dp[1 << 23];
pair<int, int> pre[1 << 23];
int fri[25];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int i, j, k, m, n;
  cin >> n >> m;
  int ta, tb;
  for (int i = 1; i <= m; ++i) {
    cin >> ta >> tb;
    ta--, tb--;
    fri[ta] |= (1 << tb);
    fri[tb] |= (1 << ta);
  }
  int mode = 1;
  for (int i = 0; i < n; ++i) {
    if (fri[i] != (1 << n) - 1 - (1 << i)) mode = 0;
  }
  if (mode) {
    cout << "0" << endl;
    return 0;
  }
  memset(dp, -1, sizeof(dp));
  memset(pre, -1, sizeof(pre));
  for (int i = 0; i < n; ++i) dp[1 << i] = 0, pre[1 << i] = make_pair(-1, -1);
  for (int i = 1; i < (1 << n); ++i) {
    if (dp[i] == -1) continue;
    for (int j = 0; j < n; ++j) {
      if (i >> j & 1) {
        int newmode = i | fri[j];
        if (dp[newmode] == -1 || (dp[newmode] > dp[i])) {
          dp[newmode] = dp[i] + 1;
          pre[newmode] = make_pair(i, j);
        }
      }
    }
  }
  cout << dp[(1 << n) - 1] << endl;
  pair<int, int> now = pre[(1 << n) - 1];
  vector<int> ans;
  while (now.first != -1) {
    ans.push_back(now.second);
    now = pre[now.first];
  }
  reverse(ans.begin(), ans.end());
  for (auto it : ans) cout << it + 1 << " ";
  return 0;
}
