小小纪念
# include <cstdio>
# include <iostream>
# include <set>
# include <map>
# include <vector>
# include <list>
# include <queue>
# include <stack>
# include <cstring>
# include <string>
# include <cstdlib>
# include <cmath>
# include <algorithm>
# define ll long long
using namespace std ;
struct Edge {
int v , next ;
} g [ 50000 ] ; ;
int head [ 210 ] , cnt ;
bool vis [ 210 ] ;
int n , m , cx [ 210 ] , cy [ 210 ] ;
void addedge ( int u , int v )
{
g [ cnt ] . v = v ;
g [ cnt ] . next = head [ u ] ;
head [ u ] = cnt ++ ;
}
bool dfs ( int u )
{
for ( int i = head [ u ] ; ~ i ; i = g [ i ] . next ) {
int v = g [ i ] . v ;
if ( ! vis [ v ] ) {
vis [ v ] = 1 ;
if ( cy [ v ] == -1 || dfs ( cy [ v ] ) ) {
cx [ u ] = v ;
cy [ v ] = u ;
return true ;
}
}
}
return false ;
}
int fuck ( )
{
int ans = 0 ;
memset ( cx , -1 , sizeof ( cx ) ) ;
memset ( cy , -1 , sizeof ( cy ) ) ;
for ( int i = 1 ; i <= n ; i ++ ) {
if ( cx [ i ] == -1 ) {
memset ( vis , 0 , sizeof ( vis ) ) ;
ans += dfs ( i ) ;
}
}
return ans ;
}
int main ( )
{
cin . sync_with_stdio ( false ) ;
while ( cin >> n >> m ) {
cnt = 0 ;
memset ( head , -1 , sizeof ( head ) ) ;
for ( int i = 1 ; i <= n ; i ++ ) {
int num ;
cin >> num ;
while ( num -- ) {
int v ;
cin >> v ;
addedge ( i , v ) ;
}
}
cout << fuck ( ) << endl ;
}
}