#include <bits/stdc++.h>
#pragma GCC optimize("omit-frame-pointer")
#pragma GCC optimize("unroll-loops")
const int MAXINT = 2147483640;
const long long MAXLL = 9223372036854775800LL;
const long long MAXN = 1000000;
const double pi = 3.1415926535897932384626433832795;
using namespace std;
int dp[8388608];
pair<int, int> p[8388608];
vector<int> v[30000];
int step[30000];
int x1[30000];
void way(int now) {
  vector<int> ans;
  ans.push_back(p[now].second);
  while (p[now].first != now) {
    now = p[now].first;
    if (now == 0) break;
    ans.push_back(p[now].second);
  }
  for (int i = ans.size() - 1; i >= 0; i--) cout << ans[i] << " ";
  cout << endl;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  srand(time(0));
  int n, m, a, b, sum, c;
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  if (n * (n - 1) / 2 == m) {
    cout << 0 << endl;
    return 0;
  }
  step[0] = 1;
  for (int i = 1; i <= 22; i++) step[i] = step[i - 1] * 2;
  for (int i = 1; i <= n; i++) {
    sum = 0;
    for (int j = 0; j < v[i].size(); j++) sum += step[v[i][j] - 1];
    sum += step[i - 1];
    x1[i] = sum;
  }
  m = 1 << n;
  for (int i = 0; i <= m; i++) dp[i] = 1e9, p[i] = {i, i};
  dp[0] = 0;
  for (int j = 0; j <= m; j++)
    for (int i = 1; i <= n; i++)
      if (dp[j] != 1e9) {
        {
          a = j;
          b = step[i - 1];
          c = a | b;
          if (a != c and j != 0) continue;
          a = x1[i];
          b = j;
          c = a | b;
          if (dp[c] > dp[j] + 1) {
            dp[c] = dp[j] + 1;
            p[c] = {j, i};
          }
        }
      }
  cout << dp[m - 1] << endl;
  way(m - 1);
  return 0;
}
