#include <bits/stdc++.h>
using namespace std;
struct Team {
  string nome;
  int punti, fatti, subiti;
  Team() : nome(""), punti(0), fatti(0), subiti(0) {}
  Team(string nome) : nome(nome), punti(0), fatti(0), subiti(0) {}
  bool operator<(Team t) const {
    if (this->punti == t.punti) {
      if (this->fatti - this->subiti == t.fatti - t.subiti) {
        return this->fatti > t.fatti;
      }
      return this->fatti - this->subiti > t.fatti - t.subiti;
    }
    return this->punti > t.punti;
  }
};
int main() {
  int n;
  cin >> n;
  map<string, Team> m;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    m[s] = Team(s);
  }
  for (int i = 0; i < n * (n - 1) / 2; i++) {
    string s1, s2;
    cin >> s1 >> s2;
    string t1 = s1.substr(0, s1.find('-'));
    string t2 = s1.substr(s1.find('-') + 1);
    int g1, g2;
    stringstream(s2.substr(0, s2.find(':'))) >> g1;
    stringstream(s2.substr(s2.find(':') + 1)) >> g2;
    if (g1 > g2) {
      m[t1].punti += 3;
    } else if (g1 == g2) {
      m[t1].punti += 1;
      m[t2].punti += 1;
    } else {
      m[t2].punti += 3;
    }
    m[t1].fatti += g1;
    m[t1].subiti += g2;
    m[t2].fatti += g2;
    m[t2].subiti += g1;
  }
  vector<Team> teams;
  for (map<string, Team>::iterator it = m.begin(); it != m.end(); it++) {
    teams.push_back(it->second);
  }
  sort(teams.begin(), teams.end());
  vector<string> nomi;
  for (int i = 0; i < n / 2; i++) {
    nomi.push_back(teams[i].nome);
  }
  sort(nomi.begin(), nomi.end());
  for (int i = 0; i < n / 2; i++) {
    cout << nomi[i] << "\n";
  }
}
