#include "iostream"
#include "vector"
#include "algorithm"
#include "unordered_set"
#include "set"
#include "unordered_map"
#include "cstdio"
#include "queue"
#include "algorithm"
#include "climits"
#include "map"
#include "stack"
#include "cstring"
#include "climits"
using namespace std;
#define ll long long
#define mod 1000000007
struct score{
int s;
int v;
int l;
string name;
score(string s):name(s),s(0),v(0),l(0){}
};
void getName(string s,string& a,string& b){
int i=0;
while(s[i]!='-')i++;
a=s.substr(0,i);
b=s.substr(i+1,s.length()-i-1);
}
void getS(string s,int& a,int& b){
int i=0;
while(s[i]!=':')i++;
a=0;b=0;
for(int j=0;j<i;j++)a=10*a+s[j]-'0';
for(int j=i+1;j<s.length();j++)b=10*b+s[j]-'0';
}
bool cmp(score* a,score* b){
if(a->s>b->s)return true;
if(a->s<b->s)return false;
if((a->v-a->l)>(b->v-b->l))return true;
if((a->v-a->l)<(b->v-b->l))return false;
return (a->v)>(b->v);
}
int main(){
int n;
while(cin>>n){
unordered_map<string,int> map;
vector<score*> a(n);
int i;
string name;
for(i=0;i<n;i++){
cin>>name;
a[i]=new score(name);
map[name]=i;
}
int L=n*(n-1)/2;
string p,q;
string name1,name2;
int s1,s2;
for(i=0;i<L;i++){
cin>>p>>q;
getName(p,name1,name2);
getS(q,s1,s2);
//cout<<name1<<" "<<name2<<endl;
int id1=map[name1];
int id2=map[name2];
a[id1]->v+=s1;
a[id2]->v+=s2;
a[id1]->l+=s2;
a[id2]->l+=s1;
if(s1>s2){
a[id1]->s+=3;
}else if(s1==s2){
a[id1]->s+=1;
a[id2]->s+=1;
}else{
a[id2]->s+=3;
}
}
sort(a.begin(),a.end(),cmp);
for(int i=0;i<n;i++){
//cout<<a[i]->name<<" "<<a[i]->s<<" "<<a[i]->v<<" "<<a[i]->l<<endl;
}
n/=2;
vector<string> result(n);
for(int i=0;i<n;i++){
result[i]=a[i]->name;
}
sort(result.begin(),result.end());
for(int i=0;i<n;i++){
cout<<result[i]<<endl;
}
}
return 0;
}
40%...