#include <iostream>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
const int maxn = (1 << 16) + 7;
const int maxm = 20;
int n,m, around[maxm],cover[maxn],f[maxn];
int main()
{
int t,kCase = 1;
while (cin >> n && n) {
for (int i = 0; i < n; i++) {
cin >> m;
around[i] = 1 << i;
for (int j = 0; j < m; j++) {
cin >> t;
around[i] |= 1 << t;
}
}
for (int i = 0; i < 1 << n; i++) {
cover[i] = 0;
for (int j = 0; j < n; j++) {
if (i & (1 << j)) cover[i] |= around[j];
}
}
int target = (1 << n) - 1;
f[0] = 0;
for (int i = 1; i < 1 << n; i++) {
f[i] = 0;
for (int j = i; j; j = (j - 1) & i) {
if (cover[j] == target) f[i] = max(f[i], f[i ^ j] + 1);
}
}
cout << "Case " << kCase++ << ": " << f[target] << endl;
}
return 0;
}