/*
http://acm.hdu.edu.cn/showproblem.php?pid=4039
题意:给出N对好友关系,之后Q次提问,问可以对该用户推荐的相识度最高的好友;
推荐好友满足的条件:该用户的所有好友的好友中,出现次数最多的,
而且推荐好友本身不是该用户的好友;若有多个推荐好友时,按字典序输出;
一道悲剧的题啊*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 2500
#include<iostream>
#include<algorithm>
using namespace std;
char str[N][20],out[N][20];
int map[N][N],k,max1,num[N];
int find(char c[])
{
int i;
for(i=0;i<k;i++)
{
if(strcmp(c,str[i])==0)
{
return i;
}
}
strcpy(str[i],c);
k++;
return i;
}
int search(int x)
{
max1=-1;
int i,j;
for(i=0;i<k;i++)//以前做时 暴力枚举有共同的好友最多的人 ,不知为嘛tle 悲剧
{
if(map[x][i]==1)
for(j=0;j<k;j++)
{
if(map[x][j]==0&&map[i][j]==1&&x!=j)
{
num[j]++;
if(max1<num[j])max1=num[j];
}
}
}
return max1;
}
int cmp(const void *a, const void *b)
{
return strcmp( (char *)a, (char *)b );
}
int main()
{
int T,l,n,q,i;
char a[20],b[20];
scanf("%d",&T);
for(l=1;l<=T;l++)
{
k=0;
scanf("%d%d",&n,&q);
getchar();
memset(map,0,sizeof(map));
for(i=0;i<n;i++)
{
scanf("%s%s",a,b);
int x=find(a);
int y=find(b);
map[x][y]=map[y][x]=1;
}
printf("Case %d:\n",l);
while(q--)
{
scanf("%s",a);
memset(num,0,sizeof(num));
int x=find(a);
max1=search(x);
//printf("%d\n",max1);
if(max1==-1)
{
printf("-\n");
continue;
}
int len=0;
for(i=0;i<k;i++)
{
if(max1==num[i])
{
strcpy(out[len++],str[i]);
}
}
qsort(out,len,sizeof(out[0]),cmp);
for(i=0;i<len;i++)
{
printf("%s",out[i]);
if(i!=len-1)printf(" ");
}
printf("\n");
}
}
}