/**
树状dp
POJ 1463 Strategic game
*/
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define ll long long
#define maxn 1505
using namespace std;
vector <int> v[maxn];
int dp[maxn][2];
/**
dp[i][0]表示以i为根节点的子树,在i处不放士兵的最小士兵书
dp[i][0]初始为0
dp[i][0]+=dp[i_son][1];
dp[i][1]表示以i为根节点的子树,在i处放士兵的最小士兵书
dp[i][1]初始为1
dp[i][1]+=min(dp[i_son][0],dp[i-son][1]);
*/
int dfs(int root){
if(v[root].empty()) {
dp[root][1]=1; //叶子节点放士兵为1
dp[root][0]=0; //不放士兵为0
return 1;
}
for(int i=0;i<v[root].size();i++){
int son=v[root][i];
dfs(son);
dp[root][1]+=min(dp[son][0],dp[son][1]);
dp[root][0]+=dp[son][1];
}
dp[root][1]+=1;
return min(dp[root][0],dp[root][1]);
}
int main(){
int n;
while(~scanf("%d",&n)){
int root,m,a;
memset(v,0,sizeof(v));
memset(dp,0,sizeof(dp));
int r;
for(int i=0;i<n;i++){
scanf("%d:(%d)",&root,&m);
if(i==0) r=root;
for(int j=0;j<m;j++){
scanf("%d",&a);
v[root].push_back(a);
}
}
int ans=dfs(r);
printf("%d\n",ans);
}
return 0;
}