#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>
using namespace std;
int n;//记录已出现的队伍数
//注意罚时时如何处理的
struct student
{
int pass_number;//ac的数目
int time;//罚时
int pass[16];//标记该题目是否被ac,其实没必要,根据failed就可以判断了
char name[21];
int failed[16];
};
bool cmp(student x,student y)//重载运算符,被sort 函数所用;
{
if(x.pass_number!=y.pass_number)
return x.pass_number>y.pass_number;
else
return x.time<y.time;
}
//每行一个评判结果,格式为:时间(第几分钟提交的)+半角空格+队名+半角空格+题号+半角空格+评判结果(0通过,其它为出错)
student a[500001];
int main()
{
int time,flag,i,flag1;
char name[100];
char number;
while(scanf("%d %s %c %d",&time,name,&number,&flag)!=EOF)
{
flag1=1;//用来标记该队伍有没有出现过
for(i=0;i<n;i++)
{
if(strcmp(name,a[i].name)==0)//如果有相同,就跳出循环,不用n++
{
//printf("ok\n");
flag1=0;
break;
}
}
if(flag1==1)
{
n++;
//printf("n=%d,i=%d\n",n,i);
}
strcpy(a[i].name,name);
if(flag==0&&a[i].pass[number-'A'+1]==0)//正确且没被ac过
{
a[i].pass_number++;
a[i].pass[number-'A'+1]=1;//标记被ac过
a[i].time+=time+20*a[i].failed[number-'A'+1];//时间=提交时间+错误次数
}
if(flag!=0&&a[i].pass[number-'A'+1]==0)//错误且没被ac过
{
a[i].failed[number-'A'+1]++;//该题错误次数加一;
}
/* for(i=0;i<n;i++)
{
if(a[i].pass_number==0)
break;
else
printf("%s %d %d\n",a[i].name,a[i].pass_number,a[i].time);
}*/
// printf("goulaide");
}
sort(a,a+n,cmp);
for(i=0;i<n;i++)//输出
{
if(a[i].pass_number==0)
break;
else
printf("%s %d %d\n",a[i].name,a[i].pass_number,a[i].time);
}
// printf("xiba\n");
}