#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct place { char p[85]; //地名 int n; //记录水果种数 char f[100][85]; //水果名 int num[100]; //每种水果个数 }p[100]; int cmp1(place a,place b) { return strcmp(a.p,b.p)<0; } void bubble_sort(place &a) { int i,j; char t[85]; int temp; for(i=0;i<a.n;i++) { for(j=0;j<a.n-i-1;j++) if(strcmp(a.f[j],a.f[j+1])>0) { strcpy(t,a.f[j]); strcpy(a.f[j],a.f[j+1]); strcpy(a.f[j+1],t); temp=a.num[j]; a.num[j]=a.num[j+1]; a.num[j+1]=temp; } } } int pn,fn; int n,num; char s1[85],s2[85]; int main() { // freopen("in.txt","r",stdin); int t; scanf("%d",&t); while(t--) { pn=fn=0; scanf("%d",&n); int i,j,k; for(i=0;i<n;i++) p[i].n=p[i].n=0; for(i=0;i<n;i++) for(j=0;j<100;j++) p[i].num[j]=0; while(n--) { scanf("%s%s%d",s1,s2,&num); for(i=0;i<pn;i++) if(strcmp(s2,p[i].p)==0) { for(j=0;j<p[i].n;j++) if(strcmp(s1,p[i].f[j])==0) { p[i].num[j]+=num; break; } if(j==p[i].n) { strcpy(p[i].f[p[i].n],s1); p[i].num[p[i].n]=num; p[i].n++; } break; } if(i==pn) { strcpy(p[pn].p,s2); strcpy(p[pn].f[p[pn].n],s1); p[pn].num[p[pn].n]=num; p[pn].n++; pn++; } } sort(p,p+pn,cmp1); for(i=0;i<pn;i++) bubble_sort(p[i]); for(i=0;i<pn;i++) { printf("%s/n",p[i].p); for(j=0;j<p[i].n;j++) printf(" |----%s(%d)/n",p[i].f[j],p[i].num[j]); } if(t) printf("/n"); } return 0; } /* 2 5 sa fg 5 sa ah 2 a ah 3 sa fg 6 ds ah 8 ah |----a(2) |----ds(3) |----sa(8) fg |----sa(11) */