#include<iostream>
#include<cstdio>
#include<algorithm>
#include<memory.h>
#include<vector>
#include<stack>
#include<queue>
#include<cassert>
#include<cstdlib>
#include<cmath>
#include<map>
#include<utility>
#include<cstring>
#define DEBUG(x) cout<<#x<<"= "<<x<<endl
#define DEBUGARR(x,i,f) for(int iter = i; iter <= f; ++iter) printf("%s[%d]=%d\n",#x, iter, x[iter])
#define MAX(a,b) ((a)>(b))? (a):(b)
#define MAX3(a,b,c) MAX(a,MAX(b,c))
#define MIN(a,b) ((a)<(b))? (a):(b)
#define MIN3(a,b,c) MIN(a,MIN(b,c))
#define bit(n,i) (n&(1<<(i-1)))
#define setbit(n,i) n |= (1<<(i-1))
#define inf (1<<30)
#define SETZERO(x) memset( x, 0, sizeof(x))
#define SETMIN1(x) memset( x, -1, sizeof(x))
#define CLEAR(x) while(!x.empty()) x.pop();
#define FOR(i,in,fin) for( i = (in); i <= (fin); ++i)
#define FORL(i,in,fin) for( i = (in); i < (fin); ++i)
#define FORD(i,in,fin) for( i = (in); i >= (fin); --i)
#define INC(a,b,c) ((a)<=(b) && (b)<=(c))
#define pb push_back
#define si(x) scanf("%d",&x)
#define pi(x) printf("%d\n",x)
#define sll(x) scanf("%lld",&x)
#define pll(x) printf("%lld\n",x)
#define sortv(v) sort(v.begin(),v.end())
#define sortar(a,i,n) sort(a+i,a+i+n)
#define findmp(mp,x) (mp.find(x)!=mp.end())
typedef long long ill;
using namespace std;
typedef pair <int,int> pii;
const int mod = 1000000007;
//code begins here
map <int,int> mp[11];
vector<int> adj[600];
int cap[600][600];
int n,m,nodes;
void build_graph()
{
int i,j;
nodes=0;
vector <pii> in,out;
FOR(i,1,n)
{
int src = ++nodes;
int sink = ++nodes;
if(i>1)
{
cap[sink][src]=1000000;
adj[sink].push_back(src);
}
FOR(j,1,m)
{
nodes++;
if(mp[i].count(j))
{
if(mp[i][j]==1)
continue;
out.pb(make_pair(nodes,j));
adj[src].push_back(nodes);
cap[src][nodes] = mp[i][j]-1;
}
else
{
in.pb(make_pair(nodes,j));
adj[nodes].push_back(sink);
cap[nodes][sink]=1;
}
}
}
FORL(i,0,out.size())
{
FORL(j,0,in.size())
{
if(out[i].second==in[j].second)
{
adj[out[i].first].push_back(in[j].first);
cap[out[i].first][in[j].first] = 1;
}
}
}
}
int bfs()
{
queue <int> Q;
int vis[600] = {}, from[600]={},i;
Q.push(1);
vis[1] = 1;
int flag = 1;
while( !Q.empty() && flag)
{
int x = Q.front();
Q.pop();
for( i = 0; i < adj[x].size(); i++)
{
int y = adj[x][i];
if( !vis[y] && cap[x][y] > 0)
{
Q.push(y);
vis[y] = 1;
from[y] = x;
if( y == 2)//N is the sink
{
flag = 0;
break;
}
}
}
}
int where = 2;
int path_cap = 1000000;
while( from[where])
{
int prev = from[where];
path_cap = min( path_cap, cap[prev][where]);
where = prev;
}
where = 2;
while( from[where])
{
int prev = from[where];
cap[prev][where] -= path_cap;
where = prev;
}
if( path_cap == 1000000)
{
return 0;
}
else
{
return path_cap;
}
}
int max_flow()
{
int result = 0;
while(1)
{
int path_capacity = bfs();
if(!path_capacity)
{
return result;
}
else
{
result += path_capacity;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif // ONLINE_JUDGE
int t,tc;
scanf("%d",&t);
FOR(tc,1,t)
{
int k,i,j;
SETZERO(cap);
si(n);si(m);
FOR(i,1,n)
{
mp[i].clear();
si(k);
FOR(j,1,k)
{
int x;
si(x);
mp[i][x]++;
}
}
build_graph();
assert(nodes<600);
printf("Case #%d: %d\n",tc,max_flow()+mp[1].size());
FOR(i,0,nodes)
{
adj[i].clear();
}
}
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZTxtZW1vcnkuaD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGNhc3NlcnQ+CiNpbmNsdWRlPGNzdGRsaWI+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPHV0aWxpdHk+CiNpbmNsdWRlPGNzdHJpbmc+CgojZGVmaW5lIERFQlVHKHgpIGNvdXQ8PCN4PDwiPSAiPDx4PDxlbmRsCiNkZWZpbmUgREVCVUdBUlIoeCxpLGYpIGZvcihpbnQgaXRlciA9IGk7IGl0ZXIgPD0gZjsgKytpdGVyKSBwcmludGYoIiVzWyVkXT0lZFxuIiwjeCwgaXRlciwgeFtpdGVyXSkKI2RlZmluZSBNQVgoYSxiKSAoKGEpPihiKSk/IChhKTooYikKI2RlZmluZSBNQVgzKGEsYixjKSBNQVgoYSxNQVgoYixjKSkKI2RlZmluZSBNSU4oYSxiKSAoKGEpPChiKSk/IChhKTooYikKI2RlZmluZSBNSU4zKGEsYixjKSBNSU4oYSxNSU4oYixjKSkKI2RlZmluZSBiaXQobixpKSAobiYoMTw8KGktMSkpKQojZGVmaW5lIHNldGJpdChuLGkpIG4gfD0gKDE8PChpLTEpKQojZGVmaW5lIGluZiAoMTw8MzApCiNkZWZpbmUgU0VUWkVSTyh4KSBtZW1zZXQoIHgsIDAsIHNpemVvZih4KSkKI2RlZmluZSBTRVRNSU4xKHgpIG1lbXNldCggeCwgLTEsIHNpemVvZih4KSkKI2RlZmluZSBDTEVBUih4KSB3aGlsZSgheC5lbXB0eSgpKSB4LnBvcCgpOwojZGVmaW5lIEZPUihpLGluLGZpbikgZm9yKCBpID0gKGluKTsgaSA8PSAoZmluKTsgKytpKQojZGVmaW5lIEZPUkwoaSxpbixmaW4pIGZvciggaSA9IChpbik7IGkgPCAoZmluKTsgKytpKQojZGVmaW5lIEZPUkQoaSxpbixmaW4pIGZvciggaSA9IChpbik7IGkgPj0gKGZpbik7IC0taSkKI2RlZmluZSBJTkMoYSxiLGMpICgoYSk8PShiKSAmJiAoYik8PShjKSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBzaSh4KSBzY2FuZigiJWQiLCZ4KQojZGVmaW5lIHBpKHgpIHByaW50ZigiJWRcbiIseCkKI2RlZmluZSBzbGwoeCkgc2NhbmYoIiVsbGQiLCZ4KQojZGVmaW5lIHBsbCh4KSBwcmludGYoIiVsbGRcbiIseCkKI2RlZmluZSBzb3J0dih2KSBzb3J0KHYuYmVnaW4oKSx2LmVuZCgpKQojZGVmaW5lIHNvcnRhcihhLGksbikgc29ydChhK2ksYStpK24pCiNkZWZpbmUgZmluZG1wKG1wLHgpIChtcC5maW5kKHgpIT1tcC5lbmQoKSkKdHlwZWRlZiBsb25nIGxvbmcgaWxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHBhaXIgPGludCxpbnQ+IHBpaTsKY29uc3QgaW50IG1vZCA9IDEwMDAwMDAwMDc7Ci8vY29kZSBiZWdpbnMgaGVyZQptYXAgPGludCxpbnQ+IG1wWzExXTsKdmVjdG9yPGludD4gYWRqWzYwMF07CmludCBjYXBbNjAwXVs2MDBdOwppbnQgbixtLG5vZGVzOwp2b2lkIGJ1aWxkX2dyYXBoKCkKewogICAgaW50IGksajsKICAgIG5vZGVzPTA7CiAgICB2ZWN0b3IgPHBpaT4gaW4sb3V0OwogICAgRk9SKGksMSxuKQogICAgewogICAgICAgIGludCBzcmMgPSArK25vZGVzOwogICAgICAgIGludCBzaW5rID0gKytub2RlczsKICAgICAgICBpZihpPjEpCiAgICAgICAgewogICAgICAgICAgICBjYXBbc2lua11bc3JjXT0xMDAwMDAwOwogICAgICAgICAgICBhZGpbc2lua10ucHVzaF9iYWNrKHNyYyk7CiAgICAgICAgfQogICAgICAgIEZPUihqLDEsbSkKICAgICAgICB7CiAgICAgICAgICAgIG5vZGVzKys7CiAgICAgICAgICAgIGlmKG1wW2ldLmNvdW50KGopKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihtcFtpXVtqXT09MSkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIG91dC5wYihtYWtlX3BhaXIobm9kZXMsaikpOwogICAgICAgICAgICAgICAgYWRqW3NyY10ucHVzaF9iYWNrKG5vZGVzKTsKICAgICAgICAgICAgICAgIGNhcFtzcmNdW25vZGVzXSA9IG1wW2ldW2pdLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbi5wYihtYWtlX3BhaXIobm9kZXMsaikpOwogICAgICAgICAgICAgICAgYWRqW25vZGVzXS5wdXNoX2JhY2soc2luayk7CiAgICAgICAgICAgICAgICBjYXBbbm9kZXNdW3NpbmtdPTE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBGT1JMKGksMCxvdXQuc2l6ZSgpKQogICAgewogICAgICAgIEZPUkwoaiwwLGluLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKG91dFtpXS5zZWNvbmQ9PWluW2pdLnNlY29uZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYWRqW291dFtpXS5maXJzdF0ucHVzaF9iYWNrKGluW2pdLmZpcnN0KTsKICAgICAgICAgICAgICAgIGNhcFtvdXRbaV0uZmlyc3RdW2luW2pdLmZpcnN0XSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KaW50IGJmcygpCnsKICAgIHF1ZXVlIDxpbnQ+IFE7CiAgICBpbnQgdmlzWzYwMF0gPSB7fSwgZnJvbVs2MDBdPXt9LGk7CiAgICBRLnB1c2goMSk7CiAgICB2aXNbMV0gPSAxOwogICAgaW50IGZsYWcgPSAxOwogICAgd2hpbGUoICFRLmVtcHR5KCkgJiYgZmxhZykKICAgIHsKICAgICAgICBpbnQgeCA9IFEuZnJvbnQoKTsKICAgICAgICBRLnBvcCgpOwogICAgICAgIGZvciggaSA9IDA7IGkgPCBhZGpbeF0uc2l6ZSgpOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgeSA9IGFkalt4XVtpXTsKICAgICAgICAgICAgaWYoICF2aXNbeV0gJiYgY2FwW3hdW3ldID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgUS5wdXNoKHkpOwogICAgICAgICAgICAgICAgdmlzW3ldID0gMTsKICAgICAgICAgICAgICAgIGZyb21beV0gPSB4OwogICAgICAgICAgICAgICAgaWYoIHkgPT0gMikvL04gaXMgdGhlIHNpbmsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBmbGFnID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGludCB3aGVyZSA9IDI7CiAgICBpbnQgcGF0aF9jYXAgPSAxMDAwMDAwOwogICAgd2hpbGUoIGZyb21bd2hlcmVdKQogICAgewogICAgICAgIGludCBwcmV2ID0gZnJvbVt3aGVyZV07CiAgICAgICAgcGF0aF9jYXAgPSBtaW4oIHBhdGhfY2FwLCBjYXBbcHJldl1bd2hlcmVdKTsKICAgICAgICB3aGVyZSA9IHByZXY7CiAgICB9CiAgICB3aGVyZSA9IDI7CiAgICB3aGlsZSggZnJvbVt3aGVyZV0pCiAgICB7CiAgICAgICAgaW50IHByZXYgPSBmcm9tW3doZXJlXTsKICAgICAgICBjYXBbcHJldl1bd2hlcmVdIC09IHBhdGhfY2FwOwogICAgICAgIHdoZXJlID0gcHJldjsKICAgIH0KICAgIGlmKCBwYXRoX2NhcCA9PSAxMDAwMDAwKQogICAgewogICAgICAgIHJldHVybiAwOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHJldHVybiBwYXRoX2NhcDsKICAgIH0KfQppbnQgbWF4X2Zsb3coKQp7CiAgICBpbnQgcmVzdWx0ID0gMDsKICAgIHdoaWxlKDEpCiAgICB7CiAgICAgICAgaW50IHBhdGhfY2FwYWNpdHkgPSBiZnMoKTsKICAgICAgICBpZighcGF0aF9jYXBhY2l0eSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJlc3VsdCArPSBwYXRoX2NhcGFjaXR5OwogICAgICAgIH0KICAgIH0KfQppbnQgbWFpbigpCnsKICAgICNpZm5kZWYgT05MSU5FX0pVREdFCiAgICAgICAgZnJlb3BlbigiYS5pbiIsInIiLHN0ZGluKTsKICAgICNlbmRpZiAvLyBPTkxJTkVfSlVER0UKICAgIGludCB0LHRjOwogICAgc2NhbmYoIiVkIiwmdCk7CiAgICBGT1IodGMsMSx0KQogICAgewogICAgICAgIGludCBrLGksajsKICAgICAgICBTRVRaRVJPKGNhcCk7CiAgICAgICAgc2kobik7c2kobSk7CiAgICAgICAgRk9SKGksMSxuKQogICAgICAgIHsKICAgICAgICAgICAgbXBbaV0uY2xlYXIoKTsKICAgICAgICAgICAgc2koayk7CiAgICAgICAgICAgIEZPUihqLDEsaykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgICAgICBzaSh4KTsKICAgICAgICAgICAgICAgIG1wW2ldW3hdKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVpbGRfZ3JhcGgoKTsKICAgICAgICBhc3NlcnQobm9kZXM8NjAwKTsKICAgICAgICBwcmludGYoIkNhc2UgIyVkOiAlZFxuIix0YyxtYXhfZmxvdygpK21wWzFdLnNpemUoKSk7CiAgICAgICAgRk9SKGksMCxub2RlcykKICAgICAgICB7CiAgICAgICAgICAgIGFkaltpXS5jbGVhcigpOwogICAgICAgIH0KICAgIH0KfQoKCg==