#include <bits/stdc++.h>
using namespace std;
vector<string> token(string a) {
  vector<string> w;
  a.push_back(' ');
  while (!a.empty()) {
    w.push_back(a.substr(0, a.find(" ")));
    a = a.substr(a.find(" ") + 1, a.size() - 1);
  }
  return w;
}
map<string, int> mapik;
vector<string> amapik;
int dodaj(string a) {
  if (mapik.count(a) == 0) {
    mapik[a] = mapik.size() - 1;
    amapik.push_back(a);
  }
  return mapik[a];
}
char tmp_str[1000];
string scanf_string() {
  scanf("%s", tmp_str);
  return tmp_str;
}
const int N = 17;
int n, m;
int nielubi[N];
string nazwa[N];
vector<string> best;
void setbit(int &l, int i) { l = l | (1 << i); }
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    dodaj(nazwa[i] = scanf_string());
  }
  for (int i = 0; i < m; i++) {
    int a = dodaj(scanf_string());
    int b = dodaj(scanf_string());
    setbit(nielubi[a], b);
    setbit(nielubi[b], a);
  }
  int res = 0;
  for (int i = 0; i < 1 << n; i++) {
    int tmp = i;
    int zle = 0;
    int ile = 0;
    for (int k = 0; k < n; k++) {
      int jest = tmp & 1;
      if (jest) {
        ile++;
        zle |= nielubi[k] & i;
      }
      tmp >>= 1;
    }
    if (!zle && ile > res) {
      res = ile;
      best.clear();
      int tmp = i;
      for (int k = 0; k < n; k++) {
        if (tmp & 1) {
          best.push_back(nazwa[k]);
        }
        tmp >>= 1;
      }
    }
  }
  sort((best).begin(), (best).end());
  printf("%d\n", res);
  for (int i = 0; i < best.size(); i++) {
    printf("%s\n", best[i].c_str());
  }
  return 0;
}
