import java.util.*;
public class Main {
static class testee implements Comparable<testee>{
private String reg_num;
private int score;
private int location;
private int localRank;
private int finalRank;
public testee(String reg_num, int score,int location) {
this.reg_num = reg_num;
this.score = score;
this.location=location;
}
@Override
public int compareTo(testee o) {//排序方法
if (score == o.score) {
return reg_num.compareTo(o.reg_num);
} else if (score > o.score) {
return -1;
} else {
return 1;
}
}
@Override
public String toString() {
return reg_num + " " + finalRank + " " + (location+1) + " " + localRank;
}
}
static ArrayList<ArrayList<testee>>arrayList=new ArrayList<>();
static ArrayList<testee>totalList=new ArrayList<>();
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
for (int i=0;i<n;i++){
int k=scanner.nextInt();
ArrayList<testee>arrayList1=new ArrayList<>();//本地列表
for (int j=0;j<k;j++){
String reg_num=scanner.next();
int score= scanner.nextInt();
testee testee= new testee(reg_num,score,i);
arrayList1.add(testee);
}
Collections.sort(arrayList1);
arrayList.add(arrayList1);
}
for (int i=0;i< arrayList.size();i++){//本地列表排序完之后再进行并列的处理
arrayList.get(i).get(0).localRank=1;
totalList.add(arrayList.get(i).get(0));
for (int j=1;j<arrayList.get(i).size();j++){
if (arrayList.get(i).get(j).score==arrayList.get(i).get(j-1).score){
arrayList.get(i).get(j).localRank=arrayList.get(i).get(j-1).localRank;
}
else arrayList.get(i).get(j).localRank=j+1;
totalList.add(arrayList.get(i).get(j));//testee录入了localRank信息后再入totalList
}
}
Collections.sort(totalList);
totalList.get(0).finalRank=1;
for (int i=1;i<totalList.size();i++){//总排名的并列处理
if (totalList.get(i-1).score==totalList.get(i).score){
totalList.get(i).finalRank=totalList.get(i-1).finalRank;
}
else totalList.get(i).finalRank=i+1;
}
System.out.println(totalList.size());
for (int i=0;i<totalList.size();i++){
testee t=totalList.get(i);
System.out.println(t);
}
}
}