#include<iostream>#include<string.h>#include<stdlib.h>#include<string.h>#include<stdio.h>#include<queue>usingnamespace std;#define MAXN 1555#define INF 0x1f1f1fbool gra[MAXN][MAXN];int cx[MAXN], cy[MAXN],dx[MAXN], dy[MAXN], n;bool vis[MAXN];booldfs(int u){for(int i =0; i < n; i++){if(gra[u][i]&&!vis[i]&& dy[i]== dx[u]+1){
vis[i]=1;if(cy[i]==-1||dfs(cy[i])){
cy[i]= u;
cx[u]= i;returntrue;}}}returnfalse;}voidsolve(){memset(cx,-1,sizeof(cx));memset(cy,-1,sizeof(cy));int ans =0;while(1){queue<int>que;memset(dx,-1,sizeof(dx));memset(dy,-1,sizeof(dy));bool flag =false;for(int i =0; i < n; i++){if(cx[i]==-1){
que.push(i);
dx[i]=0;}}while(!que.empty()){int u = que.front();
que.pop();for(int i =0; i < n; i++){if(gra[u][i]&& dy[i]==-1){
dy[i]= dx[u]+1;if(cy[i]==-1) flag =true;else{
dx[cy[i]]= dy[i]+1;
que.push(cy[i]);}}}}if(!flag)break;memset(vis,0,sizeof(vis));for(int i =0; i < n; i++)if(cx[i]==-1&&dfs(i)) ans++;}printf("%d\n",ans/2);}intmain(){int u, v, num;while(scanf("%d",&n)!= EOF){memset(gra,0,sizeof(gra));for(int i =0; i < n; i++){scanf("%d:(%d)",&u,&num);for(int i =0; i < num; i++){scanf("%d",&v);
gra[u][v]= gra[v][u]=1;}}solve();}}