#include<bits/stdc++.h>
using namespace std;
struct node
{
string name;
int score;
int jsq;
int jqs;
}p[55];
int cmp(node x,node y)
{
if(x.score==y.score)
{
if(x.jsq==y.jsq)
{
return x.jqs>y.jqs;
}
return x.jsq>y.jsq;
}
return x.score>y.score;
}
int cmp2(node x,node y)
{
return x.name<y.name;
}
int main()
{
int n;
cin>>n;
string str;
char a = '-',b = ':', c = ' ';
for(int i=1;i<=n;i++){cin>>p[i].name;p[i].score=0;}
string str1="\n";
getline(cin,str1);
for(int i=1;i<=n*(n-1)/2;i++)
{
getline(cin,str);
int index1 = str.find(a);
int index2 = str.find(c);
int index3 = str.find(b);
string name1=str.substr(0,index1);
string name2 = str.substr(index1+1,index2-index1-1);
int sorce1 = atoi(str.substr(index2+1,index3-index2-1).c_str());
int sorce2 = atoi(str.substr(index3+1,str.size()-index3-1).c_str());
for(int i=1;i<=n;i++)
{
if(p[i].name==name1)
{
if(sorce1>sorce2)p[i].score+=3;
else if(sorce1==sorce2)p[i].score+=1;
p[i].jsq=sorce1-sorce2;
p[i].jqs=sorce1;
}
else if(p[i].name==name2)
{
if(sorce1<sorce2)p[i].score+=3;
else if(sorce1==sorce2)p[i].score+=1;
p[i].jsq=sorce2-sorce1;
p[i].jqs=sorce2;
}
}
}
sort(p+1,p+1+n,cmp);
sort(p+1,p+n/2+1,cmp2);
for(int i=1;i<=n/2;i++)cout<<p[i].name<<endl;
return 0;
}