#include<bits/stdc++.h>
using namespace std;
#define MAXN 1005
int M,N,used[MAXN],lin[MAXN],g[MAXN][MAXN];
bool dfs(int m){
for(int n=0;n<M;n++){
if(used[n]&&g[m][n]){
used[n]=0;
if(lin[n]==-1||dfs(lin[n])){
lin[n]=m;return true;
}
}
}
return false;
}
int hu(){
int ans=0;
memset(lin,-1,sizeof(lin));
for(int m=0;m<M;m++){
memset(used,1,sizeof(used));
if(dfs(m)) ans++;
}
return ans;
}
int main(){
int m,n,k;
while(scanf("%d",&M)==1){
memset(g,0,sizeof(g));
for(int i=0;i<M;i++){
scanf("%d: (%d)",&m,&k);
while(k--){
scanf("%d",&n);
g[m][n]=1; //m男和n女
g[n][m]=1; //n男和m女
//不知道哪个是男或女
}
}
printf("%d\n",M-hu()/2);
//男和女的情况应该是相等的所以最大匹配数要/2
}
}
未说清两块分别是什么,那就都有可能,
所以1.建边时建双向的
2.最后最大匹配数要÷2