#include <bits/stdc++.h>
using namespace std;
struct team {
  string naz;
  int pkt, G, g;
};
void Nazwy(string nap, string* a, string* b) {
  int i = 0;
  while (nap[i] != '-') {
    *a += nap[i];
    ++i;
  }
  ++i;
  while (i < nap.size()) {
    *b += nap[i];
    ++i;
  }
}
void Gole(string nap, int* a, int* b) {
  int i = 0;
  while (nap[i] != ':') {
    *a = *a * 10 + (nap[i] - '0');
    ++i;
  }
  ++i;
  while (i < nap.size()) {
    *b = *b * 10 + (nap[i] - '0');
    ++i;
  }
}
bool porownanie(team a, team b) {
  if (a.pkt > b.pkt) return true;
  if (b.pkt > a.pkt) return false;
  if (a.G - a.g > b.G - b.g) return true;
  if (b.G - b.g > a.G - a.g) return false;
  if (a.G > b.G) return true;
  if (b.G > a.G) return false;
}
int main() {
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  vector<team> a(n);
  map<string, int> nr;
  for (int i = 0; i < n; ++i) {
    cin >> a[i].naz;
    a[i].pkt = a[i].G = a[i].g = 0;
    nr[a[i].naz] = i;
  }
  for (int i = 0; i < n * (n - 1) / 2; ++i) {
    string x, y;
    cin >> x >> y;
    string naz1 = "", naz2 = "";
    Nazwy(x, &naz1, &naz2);
    int gol1 = 0, gol2 = 0;
    Gole(y, &gol1, &gol2);
    a[nr[naz1]].G += gol1;
    a[nr[naz1]].g += gol2;
    if (gol1 > gol2) a[nr[naz1]].pkt += 3;
    if (gol1 == gol2) ++a[nr[naz1]].pkt;
    a[nr[naz2]].G += gol2;
    a[nr[naz2]].g += gol1;
    if (gol2 > gol1) a[nr[naz2]].pkt += 3;
    if (gol2 == gol1) ++a[nr[naz2]].pkt;
  }
  sort(a.begin(), a.end(), porownanie);
  vector<string> t;
  for (int i = 0; i < n / 2; ++i) t.push_back(a[i].naz);
  sort(t.begin(), t.end());
  for (int i = 0; i < t.size(); ++i) cout << t[i] << endl;
  return 0;
}
