Peter 是 Agile Change Management (ACM) Inc. 的高级经理,这里的每位员工都是一个或多个任务组的成员。由于 ACM 采用敏捷管理,任务组经常重组,成员也频繁变动,因此成员管理一直是让他头疼的问题。
每当发生变化时,Peter 都会更新成员信息。例如,他写的以下内容表示 Carol 和 Alice 是 Design 组的成员:
design:carol,alice.
冒号前面的名称是组名,后面的名称指定了其成员。
较小的任务组可以包含在较大的任务组中。因此,一个组名可以作为另一个组的成员出现,例如:
development:alice,bob,design,eve.
简单地展开上述 design 组,可以得到以下与原定义等价的成员说明:
development:alice,bob,carol,alice,eve.
然而,在这种情况下,alice 出现了两次。在去重之后,我们得到了以下更简练的说明:
development:alice,bob,carol,eve.
你在本题中的任务是编写一个程序,在给定各组的定义后,确定指定组中的成员(员工)数量。
请注意,Peter 的定义中可能包含深度嵌套的组。例如,在下文中,one 组仅包含一名成员 dave:
one:another.
another:yetanother.
yetanother:dave.
输入格式
输入包含多组测试数据。每组数据的格式如下:
$$n$$ $$\text{group}_1:\text{member}_{1,1}, \dots, \text{member}_{1,m_1}.$$ $$\vdots$$ $$\text{group}_i:\text{member}_{i,1}, \dots, \text{member}_{i,m_i}.$$ $$\vdots$$ $$\text{group}_n:\text{member}_{n,1}, \dots, \text{member}_{n,m_n}.$$
第一行包含一个正整数 $n$,表示组的数量,满足 $1 \le n \le 100$。
接下来的 $n$ 行,每行包含一个组的成员信息:$\text{group}_i$ ($1 \le i \le n$) 是第 $i$ 个任务组的名称,后跟一个冒号(:),然后是由逗号(,)分隔并以句点(.)结尾的 $m_i$ 个成员列表。
这些组名两两不同。每个 $m_i$ ($1 \le i \le n$) 都在 $1$ 到 $10$ 之间(包含边界)。
如果一个成员的名称是 $\text{group}_1, \text{group}_2, \dots, \text{group}_n$ 中的一个,则它代表另一个组的名称;否则,它代表一名员工的名字。
不存在循环(或递归)的组定义。你可以假设一个组内的 $m_i$ 个成员名称两两不同。
每个组名或员工姓名都是一个长度在 $1$ 到 $15$ 之间(包含边界)的非空字符串,且仅由小写字母组成。
输入结束由仅包含一个零(0)的一行表示。
输出格式
对于每组测试数据,在一行中输出该数据中第一个组(即 $\text{group}_1$)所包含的员工(个人,而非组)数量。输出中不应包含多余的字符。
样例
输入样例 1
2 development:alice,bob,design,eve. design:carol,alice. 3 one:another. another:yetanother. yetanother:dave. 3 friends:alice,bob,bestfriends,carol,fran,badcompany. bestfriends:eve,alice. badcompany:dave,carol. 5 a:b,c,d,e. b:c,d,e,f. c:d,e,f,g. d:e,f,g,h. e:f,g,h,i. 4 aa:bb. cc:dd,ee. ff:gg. bb:cc. 0
输出样例 1
4 1 6 4 2