你正在按照食谱准备午餐。
食谱是通过将多种配料混合在一个碗中制成的。每种配料要么是:
- 另一种必须先在单独的碗中制成的混合物;或者
- 你厨房里已有的基础配料,可以直接添加。
要制作一种混合物,你需要准备好它所有的配料,拿一个空碗,将配料混合在里面。不能通过向碗中已有的混合物添加配料来制作混合物。
例如,如果你想用 CAKEMIX(一种混合物)和 lies(一种基础配料)制作 CAKE(一种混合物),那么你必须先在自己的碗中制作 CAKEMIX,然后将 CAKEMIX 和 lies 加入第二个碗中来制作 CAKE。
一旦你将一种混合物作为配料使用并清空了准备它的碗,你就可以将该碗重新用于另一种混合物。因此,准备食谱所需的碗的数量取决于你决定制作混合物的顺序。
确定你所需的最少碗的数量。
输入格式
第一行包含一个整数 $C$,表示输入文件中的测试用例数量。
对于每个测试用例:
- 第一行包含一个整数 $N$,表示该测试用例中混合物的数量。
- 接下来 $N$ 行,每行对应一种混合物,包含:
- 一个字符串,表示混合物的名称;
- 一个整数 $M$,表示该混合物中配料的数量;
- $M$ 个字符串,表示该混合物每种配料的名称。
同一行中的标记由单个空格分隔。
测试用例中的第一个混合物就是你要制作的最终食谱。
混合物的名称是长度在 1 到 20 之间的全大写字母字符串。
基础配料的名称是长度在 1 到 20 之间的全小写字母字符串。
每种混合物恰好被用于另一种混合物中,食谱本身除外(食谱不被用于任何其他混合物中)。每种配料在混合物的配料列表中最多出现一次。没有任何混合物会(直接或间接地)需要它自身作为配料。
输出格式
对于每个测试用例,输出一行 "Case #$X$: $Y$",其中 $X$ 是测试用例编号(从 1 开始),$Y$ 是所需的最少混合碗数量。
数据范围
时间限制:2 秒。 内存限制:1GB。
$1 \le C \le 10$ $2 \le M \le 10$
小数据集(测试集 1 - 可见;5 分)
$1 \le N \le 10$
大数据集(测试集 2 - 隐藏;9 分)
$1 \le N \le 1000$
样例
输入 1
2 3 SOUP 3 STOCK salt water STOCK 2 chicken VEGETABLES VEGETABLES 2 celery onions 5 MILKSHAKE 4 milk icecream FLAVOR FRUIT FRUIT 2 banana berries FLAVOR 2 SPICES CHOCOLATE SPICES 2 nutmeg cinnamon CHOCOLATE 2 cocoa syrup
输出 1
Case #1: 2 Case #2: 3
说明
在第一个案例中,为了满足你对 SOUP 的渴望,你遵循以下步骤:
- 在碗中混合 celery 和 onions 制作 VEGETABLES。
- 在第二个碗中混合 chicken 和来自第一个碗的 VEGETABLES 制作 STOCK。第一个碗变空。
- 在第一个碗中混合 STOCK、salt 和 water 制作 SOUP。
在第二个案例中,在将 FLAVOR 和 FRUIT 与 milk 和 icecream 混合制作 MILKSHAKE 之前,你可以选择先制作 FLAVOR 还是 FRUIT。
如果我们先制作 FRUIT,我们需要四个碗:
- 在碗中混合 banana 和 berries 制作 FRUIT。
- 在第二个碗中混合 nutmeg 和 cinnamon 制作 SPICES,在第三个碗中混合 cocoa 和 syrup 制作 CHOCOLATE。(顺序不限)
- 在第四个碗中混合 SPICES 和 CHOCOLATE 制作 FLAVOR。
- 在第二个或第三个碗中混合 FRUIT、FLAVOR、milk 和 icecream 制作 MILKSHAKE。
然而,如果我们先制作 FLAVOR 再制作 FRUIT,我们只需要三个碗:
- 在碗中混合 nutmeg 和 cinnamon 制作 SPICES,在第二个碗中混合 cocoa 和 syrup 制作 CHOCOLATE。(顺序不限)
- 在第三个碗中混合 SPICES 和 CHOCOLATE 制作 FLAVOR。
- 在第一个碗中混合 banana 和 berries 制作 FRUIT。
- 在第二个碗中混合 FRUIT、FLAVOR、milk 和 icecream 制作 MILKSHAKE。