#include <iostream>
#include <string>
#include <list>
using namespace std;
int main(void)
{
int t;/*测试用例个数*/
int n,m;/*n为游戏者数量,m为转化列表的长度*/
string transfer[100][2];/*单词转换表*/
string result[100];/*用于存放结果*/
string str;//暂时存放每次的结果
cin>>t;
for (int i=1;i<=t;i++)
{
cin>>n>>m;
string s1,s2;
//读入转换表
for (int j=0;j<m;j++)
{
cin>>s1>>s2;
transfer[j][0]=s1;
transfer[j][1]=s2;
}
//读入初始的话并将其分割
getline(cin,str,'\n');
getline(cin,str,'\n');
list<string> tokens;
int size=str.size();
int pos=0;
for (int j=0;j<size;j++)
{
if (str[j]==' ')
{
//tokens.insert(0,);
tokens.push_back(str.substr(pos,j-pos));
pos=j+1;
}
}
tokens.push_back(str.substr(pos,str.size()-1));
//n轮处理
for (int j=0;j<n-1;j++)
{
list<string>::iterator k;
for (k=tokens.begin();k!=tokens.end();k++)
{
bool change=false;
for (int l=0;l<m;l++)
{
if (!change&&*k==transfer[l][0])
{
change=true;
*k=transfer[l][1];
break;
}
}
}
}
str="";
//输出答案
list<string>::iterator j;
for (j=tokens.begin();j!=tokens.end();j++)
{
str=str+(*j)+" ";
}
str=str.substr(0,str.size()-1);
result[i]=str;
}
//结果输出
for (int i=1;i<=t;i++)
{
cout<<"Case #"<<i<<": "<<result[i]<<endl;
}
return 0;
}