#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <deque>
#include <ctime>
#include <sstream>
using namespace std;
#define ot(x) cout<<x<<"\n"
#define cen cout<<"\n"
#define EPS 1e-10
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define DFS_GRAY 2
#define DFS_WHITE -1
#define DFS_BLACK 1
#define fi first
#define sc second
typedef long long int ll;
typedef vector<int> vi;
typedef pair<int,int> ii;
typedef vector<ii> vii;
vector<vi> AdjList;
priority_queue< pair<int, ii> > EdgeList;
ll n,t,j,k,i,m,l;
string s[50][50],ss;
vi match, vis;
int Aug(int l)
{
if (vis[l]) return 0;
vis[l] = 1;
for (int j = 0; j < (int)AdjList[l].size(); j++)
{
int r = AdjList[l][j];
if (match[r] == -1 || Aug(match[r]))
{
match[r] = l;
return 1;
}
}
return 0;
}
int main ()
{
ios_base::sync_with_stdio(0);
cin>>n;
for(i=0; i<n; i++)
{
cin>>m; // jumlah soal
AdjList.clear();
for(j=0;j<50;j++)for(k=0;k<50;k++)s[j][k]="";
AdjList.assign(100,vi()); // 0..25 dilanjutin 50..75
for(j=0; j<m; j++)
{
cin>>t; // jumlah alternatif nama
for(k=0; k<t; k++)
{
ss="";
cin>>ss;
ot(ss<<" DEBUG");
if(ss[0]>=97)
ss[0]-=32; // huruf pertama digedein kalau kecil
s[j][ss[0]-65]=ss;
AdjList[j].pb(50+(ss[0]-65));
}
}
int MCBM = 0;
match.assign(80, -1);
for (l = 0; l < 31; l++)
{
vis.assign(31, 0);
MCBM += Aug(l);
}
cout<<"Case #"<<i+1<<":\n";
for (j=50;j<50+m;j++){
ss = s[match[j]][j-50];
for(l=1;l<ss.length();l++)
if(ss[l]<97)ss[l]+=32;
ot(ss);
}
}
return 0;
}
/*
1
3
2 a o
2 d c
1 b
*/
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxsaXN0PgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxzc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIG90KHgpIGNvdXQ8PHg8PCJcbiIKI2RlZmluZSBjZW4gY291dDw8IlxuIgojZGVmaW5lIEVQUyAxZS0xMAojZGVmaW5lIG1wKHgseSkgbWFrZV9wYWlyKHgseSkKI2RlZmluZSBwYih4KSBwdXNoX2JhY2soeCkKI2RlZmluZSBERlNfR1JBWSAyCiNkZWZpbmUgREZTX1dISVRFIC0xCiNkZWZpbmUgREZTX0JMQUNLIDEKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNjIHNlY29uZAp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiBpaTsKdHlwZWRlZiB2ZWN0b3I8aWk+IHZpaTsKdmVjdG9yPHZpPiBBZGpMaXN0Owpwcmlvcml0eV9xdWV1ZTwgcGFpcjxpbnQsIGlpPiA+IEVkZ2VMaXN0OwpsbCBuLHQsaixrLGksbSxsOwpzdHJpbmcgc1s1MF1bNTBdLHNzOwp2aSBtYXRjaCwgdmlzOwoKaW50IEF1ZyhpbnQgbCkKewogICAgaWYgKHZpc1tsXSkgcmV0dXJuIDA7CiAgICB2aXNbbF0gPSAxOwogICAgZm9yIChpbnQgaiA9IDA7IGogPCAoaW50KUFkakxpc3RbbF0uc2l6ZSgpOyBqKyspCiAgICB7CiAgICAgICAgaW50IHIgPSBBZGpMaXN0W2xdW2pdOwogICAgICAgIGlmIChtYXRjaFtyXSA9PSAtMSB8fCBBdWcobWF0Y2hbcl0pKQogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2hbcl0gPSBsOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4gKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCiAgICBjaW4+Pm47CiAgICBmb3IoaT0wOyBpPG47IGkrKykKICAgIHsKICAgICAgICBjaW4+Pm07ICAvLyBqdW1sYWggc29hbAoKICAgICAgICBBZGpMaXN0LmNsZWFyKCk7CiAgICAgICAgZm9yKGo9MDtqPDUwO2orKylmb3Ioaz0wO2s8NTA7aysrKXNbal1ba109IiI7CgogICAgICAgIEFkakxpc3QuYXNzaWduKDEwMCx2aSgpKTsgIC8vIDAuLjI1IGRpbGFuanV0aW4gNTAuLjc1CgogICAgICAgIGZvcihqPTA7IGo8bTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgY2luPj50OyAgLy8ganVtbGFoIGFsdGVybmF0aWYgbmFtYQogICAgICAgICAgICBmb3Ioaz0wOyBrPHQ7IGsrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3M9IiI7CiAgICAgICAgICAgICAgICBjaW4+PnNzOwogICAgICAgICAgICAgICAgb3Qoc3M8PCIgREVCVUciKTsKICAgICAgICAgICAgICAgIGlmKHNzWzBdPj05NykKICAgICAgICAgICAgICAgICAgICBzc1swXS09MzI7ICAvLyBodXJ1ZiBwZXJ0YW1hIGRpZ2VkZWluIGthbGF1IGtlY2lsCiAgICAgICAgICAgICAgICBzW2pdW3NzWzBdLTY1XT1zczsKICAgICAgICAgICAgICAgIEFkakxpc3Rbal0ucGIoNTArKHNzWzBdLTY1KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGludCBNQ0JNID0gMDsKICAgICAgICBtYXRjaC5hc3NpZ24oODAsIC0xKTsKICAgICAgICBmb3IgKGwgPSAwOyBsIDwgMzE7IGwrKykKICAgICAgICB7CiAgICAgICAgICAgIHZpcy5hc3NpZ24oMzEsIDApOwogICAgICAgICAgICBNQ0JNICs9IEF1ZyhsKTsKICAgICAgICB9CgogICAgICAgIGNvdXQ8PCJDYXNlICMiPDxpKzE8PCI6XG4iOwogICAgICAgIGZvciAoaj01MDtqPDUwK207aisrKXsKCiAgICAgICAgICAgIHNzID0gc1ttYXRjaFtqXV1bai01MF07CiAgICAgICAgICAgIGZvcihsPTE7bDxzcy5sZW5ndGgoKTtsKyspCiAgICAgICAgICAgICAgICBpZihzc1tsXTw5Nylzc1tsXSs9MzI7CgogICAgICAgICAgICBvdChzcyk7CiAgICAgICAgfQoKICAgIH0KICAgIHJldHVybiAwOwp9Ci8qCjEKMwoyIGEgbwoyIGQgYwoxIGIKKi8K