#include <cstdio> #include <iostream> #include <cstring> using namespace std; const int maxn = 16; int n,d[1<<maxn],cover[1<<maxn],ALL,a[maxn*2]; int main() { int kase=1; while(scanf("%d",&n)==1&&n){ int ALL = (1<<n) - 1; for(int i=0;i<n;i++){ int m,x; a[i]=(1<<i); scanf("%d",&m); for(int j=1;j<=m;j++){ scanf("%d",&x); a[i]|=(1<<(x)); } } for(int i=1;i<=ALL;i++){ cover[i]=0; for(int j=0;j<n;j++) if(((i>>j)&1)){ cover[i]|=a[j]; } } for(int i=1;i<=ALL;i++){ d[i]=0; for(int s=i;s;s=(s-1)&i) if(cover[s]==ALL) d[i]=max(d[i],d[i^s]+1); } printf("Case %d: %d\n",kase++,d[ALL]); } return 0; }