#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
class Member
{
public:
string m_Name, m_Job;
int m_Score, m_Level, m_Pos;
Member(string name, string job, int s, int l, int pos)
{
this->m_Name = name;
this->m_Job = job;
this->m_Score = s;
this->m_Level = l;
this->m_Pos = pos;
}
void print()
{
cout << this->m_Name << " " << this->m_Job << " " << this->m_Level << endl;
}
};
class My_Com1
{
public:
bool operator()(Member& a, Member& b)
{
if (a.m_Pos == b.m_Pos)
return a.m_Level > b.m_Level;
return a.m_Pos < b.m_Pos;
}
};
class My_Com2
{
public:
bool operator()(Member& a, Member& b)
{
return a.m_Score > b.m_Score;
}
};
int main()
{
string a[8] = { "BangZhu","FuBangZhu","HuFa","ZhangLao","TangZhu","JingYing","BangZhong" };
vector<Member>v;
int n;
cin >> n;
string name, job;
int score, level, pos;
for (int i = 0; i < n; i++)
{
cin >> name >> job >> score >> level;
for (int i = 0; i < 7; i++)
{
if (job == a[i]) pos = i;
}
Member m(name, job, score, level, pos);
v.push_back(m);
}
sort(v.begin(), v.end(), My_Com1());
vector<Member>::iterator p = v.begin();
for (vector<Member>::iterator it = v.begin(); it != v.end(); it++)
{
if (it->m_Pos != 0 && it->m_Pos != 1)
{
p = it;
break;
}
}
sort(p, v.end(), My_Com2());
for (int k = 0, i = 0; i < n; i++)
{
if (v[i].m_Pos != 0 && v[i].m_Pos != 1)
{
if (k < 2) v[i].m_Job = a[2];
else if (k < 6) v[i].m_Job = a[3];
else if (k < 13) v[i].m_Job = a[4];
else if (k < 38) v[i].m_Job = a[5];
else v[i].m_Job = a[6];
k++;
}
}
cout << endl;
for (vector<Member>::iterator it = v.begin(); it != v.end(); it++)
{
it->print();
}
cout << endl;
sort(v.begin(), v.end(), My_Com1());
for (vector<Member>::iterator it = v.begin(); it != v.end(); it++)
{
it->print();
}
return 0;
}