#include <bits/stdc++.h>
usingnamespacestd;//a,b의 크기는 이분 그래프 각각의 정점 수. vis,graph의 크기는 a의 크기와 같게.inta[1001],b[1001];boolvis[1001];vector<int>graph[1001];boolBM(intcur){vis[cur]=true;for(intgo:graph[cur])if(b[go]==-1||!vis[b[go]]&&BM(b[go])){a[cur]=go;b[go]=cur;returntrue;}returnfalse;}intmain(){intn,m;scanf("%d %d",&n,&m);//아직 매칭되기 전.(-1)fill(a+1,a+1+n,-1);fill(b+1,b+1+m,-1);for(inti=1;i<=n;i++){intwork,t;scanf("%d",&work);while(work--){scanf("%d",&t);graph[i].push_back(t);}}intans=0;for(inti=1;i<=n;i++){fill(vis+1,vis+1+n,false);if(BM(i))ans++;//새로운 매칭에 성공.}printf("%d",ans);return0;}