#include <iostream>
using namespace std;
const int N = 1000;
int n; //学生人数
int pre[N]; //顶点在增广路中的前驱
bool visited[N]; //访问状态
int map[N][N]; //恋爱关系
bool find(int x) //寻找二分图的增广路
{
for (int i = 0; i < n; i++)
{
if (!visited[i] && map[x][i])
{
visited[i] = 1;
if (pre[i] == -1 || find(pre[i]))
{
pre[i] = x;
return true;
}
}
}
return false;
}
int main()
{
while (cin >> n)
{
int num, x, y;
memset(map, 0, sizeof (map));
memset(pre, -1, sizeof (pre));
for (int j = 0; j < n; j++)
{
cin >> x;
cin.get(); cin.get(); cin.get();
cin >> num;
cin.get(); cin.get();
for (int i = 0; i < num; i++)
{
cin >> y;
map[x][y] = 1;
}
}
int cnt = 0;
for (int i = 0; i < n; i++) //匈牙利算法,查找二分图最大匹配集
{
memset(visited, 0, sizeof (visited));
if (find(i))
cnt++;
}
cout << n - cnt / 2 << endl; //二分图最大独立集 = 顶点数 - 二分图最大匹配集
}
return 0;
}