#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
char difang[110],zhong[110];
int num;
}F;
int cmp(const void *a,const void *b) {
if(strcmp((*(F *)a).difang,(*(F*)b).difang)!=0)
return strcmp((*(F *)a).difang,(*(F*)b).difang)>0?1:-1;
return strcmp((*(F *)a).zhong,(*(F*)b).zhong )>0?1:-1;
}
int main() {
node a[200];
int i,j,k,n,m,t;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
k=0;
for(i=0;i<n;i++) {
char str[110],strr[110],h;
scanf("%s%s%d",str,strr,&h);
for(j=0;j<k;j++)
if(strcmp(a[j].difang,strr)==0&&strcmp(a[j].zhong,str)==0) {
a[j].num+=h;
break;
}
if(j==k) {
strcpy(a[k].difang,strr);
strcpy(a[k].zhong,str);
a[k].num=h;
k++;
}
}
qsort(a,k,sizeof(a[0]),cmp);
int d=0;
int flag=0;
for(i=0;i<k;i++) {
if(flag==0) {
flag=1;
printf("%s
",a[i].difang);
}
if(strcmp(a[d].difang,a[i].difang)==0)
printf(" |----%s(%d)
",a[i].zhong,a[i].num );
else {
flag=0;
d=i;
i--;
}
}
if(t!=0)
printf("
");
}
return 0;
}