#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
/*先输入一组数,然后输入其分组,按照分组统计出现次数并输出,参见样例。*/
int a[105];//用于记录每次输入的一组数据
int hashTable[2000][2000];
int main()
{
/*输入第一行表示样例数m,对于每个样例,第一行为数的个数n,
接下来两行分别有n个数,第一行有n个数,
第二行的n个数分别对应上一行每个数的分组,n不超过100*/
int m,n;
while(scanf("%d",&m)!=EOF)
{
for(int i=0;i<m;i++)
{
memset(hashTable,0,sizeof(hashTable));//初始化
memset(a,0,sizeof(a));
int n;
scanf("%d",&n);
int max=0;//记录输入最大的数据,不至于遍历整个hash表
for(int j=0;j<n;j++)
{
scanf("%d",&a[j]);
if(a[j]>max) max=a[j];
hashTable[0][a[j]]=1;//记录a[j]存在 行
}
int max_group=0;//同理
for(int j=0;j<n;j++)
{
int x;
scanf("%d",&x);
hashTable[x][a[j]]++;//第几组的某个数加一 填数
if(x>max_group) max_group=x;
hashTable[x][0]=1;//标识第x号为一个组号 列
}
// sort(a,a+n);//先排序
//分组统计
//output
for(int j=1;j<=max_group;j++)
{
if(hashTable[j][0]==0) continue;
printf("%d={",j);
for(int k=1;k<=max;k++)
{
if(hashTable[0][k]==0) continue;
printf("%d=%d",k,hashTable[j][k]);
if(k==max)
{
printf("}\n");
}
else
printf(",");
}
}
}
}
return 0;
}