1 #include <iostream>
2 #include <cstring>
3 #include <cstdio>
4
5 using namespace std;
6
7 int dp[1510][2];
8 int head[1510];
9 bool in[1510];
10 int num;
11
12 struct edge
13 {
14 int fro,to,next;
15 }e[15010];
16
17 void addEdge(int _fro,int _to)
18 {
19 e[num].fro=_fro;
20 e[num].to=_to;
21 e[num].next=head[_fro];
22 head[_fro]=num;
23 num++;
24 }
25
26 int dfs(int x)
27 {
28 if(dp[x][0]!=-1&&dp[x][1]!=-1)
29 return min(dp[x][0],dp[x][1]);
30 dp[x][0]=0;
31 dp[x][1]=1;
32 for(int i=head[x];i!=-1;i=e[i].next)
33 {
34 int v=e[i].to;
35 dfs(v);
36 dp[e[i].fro][1]=min(dp[v][0],dp[v][1])+dp[e[i].fro][1];
37 dp[e[i].fro][0]+=dp[v][1];
38 }
39 return min(dp[x][0],dp[x][1]);
40 }
41
42 int main()
43 {
44 int n,m;
45 while(scanf("%d",&n)!=EOF)
46 {
47 int a,b;
48 num=0;
49 memset(dp,-1,sizeof(dp));
50 memset(in,true,sizeof(in));
51 memset(head,-1,sizeof(head));
52 for(int i=0;i<n;i++)
53 {
54 scanf("%d:(%d)",&a,&m);
55 for(int t=0;t<m;t++)
56 {
57 scanf("%d",&b);
58 addEdge(a,b);
59 in[b]=false;
60 }
61 }
62 int ans;
63 for(int i=0;i<n;i++)
64 {
65 if(in[i])
66 {
67 ans=dfs(i);
68 }
69 }
70 cout<<ans<<endl;
71 }
72 return 0;
73 }