#include <bits/stdc++.h>
using namespace std;
long long int cons;
long long int check(long long int a) {
  if (a >= cons) a %= cons;
  return a;
}
long long int check2(long long int a) {
  a %= cons;
  if (a < 0) a += cons;
  return a;
}
long long int GCD(long long int a, long long int b) {
  if (b == 0) return a;
  return GCD(b, a % b);
}
long long int exp(long long int a, long long int n) {
  if (n == 0) return 1;
  if (n == 1) return check(a);
  long long int b = exp(a, n / 2);
  if (n % 2 == 0) return check(b * b);
  return check(b * check(b * a));
}
int neighbour_mask[25];
bool is_connected[1 << 23];
int neighbour_mask_ofmask[1 << 23];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cons = 1e9 + 7;
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    neighbour_mask[u] |= (1 << v);
    neighbour_mask[v] |= (1 << u);
  }
  int masks = (1 << n);
  int temp = (n * (n - 1)) >> 1;
  if (temp == m) {
    cout << 0;
    return 0;
  }
  for (int i = 0; i < masks; i++) is_connected[i] = false;
  for (int i = 0; i < n; i++) {
    is_connected[(1 << i)] = true;
    neighbour_mask[i] |= (1 << i);
  }
  for (int i = 0; i < masks; i++) {
    if (!is_connected[i]) continue;
    for (int j = 0; j < n; j++)
      if (i & (1 << j)) neighbour_mask_ofmask[i] |= neighbour_mask[j];
    for (int j = 0; j < n; j++)
      if (neighbour_mask_ofmask[i] & (1 << j))
        is_connected[i | (1 << j)] = true;
  }
  int ans = 23;
  int mask = -1;
  for (int i = 0; i < masks; i++) {
    if (is_connected[i] && (neighbour_mask_ofmask[i] == ((1 << n) - 1))) {
      int count = 0;
      int j = i;
      while (j) {
        if (j & 1) count++;
        j = j >> 1;
      }
      if (ans > count) {
        ans = count;
        mask = i;
      }
    }
  }
  cout << ans << endl;
  for (int i = 0; i < n; i++)
    if (mask & (1 << (i))) cout << i + 1 << " ";
}
