#include <bits/stdc++.h>
using namespace std;
bool E[17][17];
map<string, int> M;
void edge(int x, int y) { E[x][y] = E[y][x] = true; }
vector<string> nom;
vector<int> v, ans;
int n, m;
bool compara(int x, int y) { return nom[x] < nom[y]; }
bool val() {
  for (int j = 0; j < v.size(); j++)
    for (int k = j + 1; k < v.size(); k++)
      if (E[v[j]][v[k]]) return false;
  return true;
}
char cad[20], cad1[20];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++)
    scanf("%s", cad), M[string(cad)] = i, nom.push_back(string(cad));
  for (int i = 0; i < m; i++)
    scanf("%s%s", cad, cad1), edge(M[string(cad)], M[string(cad1)]);
  int mayor = 0;
  for (int i = 1; i < (1 << n); i++) {
    v.clear();
    for (int j = 0; j < n; j++)
      if ((i >> j) & 1) v.push_back(j);
    if (val()) {
      if ((int)v.size() > mayor) {
        mayor = (int)v.size();
        ans.clear();
        ans = v;
      }
    }
  }
  printf("%d\n", mayor);
  sort(ans.begin(), ans.end(), compara);
  for (int i = 0; i < ans.size(); i++) printf("%s\n", nom[ans[i]].c_str());
}
