#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=30010;
struct Student{
char id[15];
int grade,room,location;
}stu[maxn];
bool cmp1(Student a,Student b){
if(a.room!=b.room) return a.room<b.room;
else return a.grade>b.grade;
}
bool cmp2(Student a,Student b){
if(a.grade!=b.grade) return a.grade>b.grade;
else return strcmp(a.id,b.id)<0;
}
int main()
{
int N,index=0;
scanf("%d",&N);
for(int i=1;i<=N;i++){
int num;
scanf("%d",&num);
while(num--){
scanf("%s %d",stu[index].id,&stu[index].grade);
stu[index++].room=i;
}
}
sort(stu,stu+index,cmp1);
stu[0].location=1;
int t=0;
for(int i=1;i<index;i++){
if(stu[i].room==stu[i-1].room){
if(stu[i].grade==stu[i-1].grade){
stu[i].location=stu[i-1].location;
}else{
stu[i].location=i+1-t;
}
}else{
stu[i].location=1;
t=i;
}
}
sort(stu,stu+index,cmp2);
printf("%d\n",index);
printf("%s 1 %d 1\n",stu[0].id,stu[0].room);
t=1;
for(int i=1;i<index;i++){
if(stu[i].grade==stu[i-1].grade)
printf("%s %d %d %d\n",stu[i].id,t,stu[i].room,stu[i].location);
else{
printf("%s %d %d %d\n",stu[i].id,i+1,stu[i].room,stu[i].location);
t=i+1;
}
}
return 0;
}
先对同一考场的进行排序,再对整体进行排序