#P3283. Card Hands
Card Hands
题目描述
Jim正在编写一个用于统计分析纸牌游戏的程序。他需要高效地在内存中存储许多不同的牌组。每张牌有四种花色之一和十三种点数之一。在他的实现中,每个牌组以规范顺序存储为链表的卡片:首先按花色排序(所有梅花排在最前面,接着是方块,然后是红心,最后是黑桃)。在每个花色内部,卡片按点数排序:, , , , , , , , , , , , 。每个牌组中每种牌最多只有一张。
牌组占用了大量内存。因此,Jim决定尝试一种更高效的表示方法。每当任何两个链表共享一个共同的尾部时,它们可以更新为共享该尾部的一个副本,另一个副本可以被丢弃。这个过程可以重复进行,直到没有两个链表共享共同的尾部。
你的任务是告诉Jim需要多少个链表节点来存储所有的牌组。
输入格式
输入包含多个测试用例,以一行结束。每个测试用例的第一行是牌组的数量。接下来的每行描述一个牌组。每行以一个数字开头,表示该牌组中的卡片数量。接着是卡片列表,以空格分隔,按照上述规范顺序排列。对于每张卡片,先给出点数,然后是花色(, , , 或 )。所有牌组中的卡片总数不超过。
输出格式
对于每个测试用例,输出一行,表示存储所有链表所需的链表节点数量。
示例输入
3
3 7D AH 5S
4 9C 3D 4D 5S
2 AH 5S
0
示例输出
6
来源
Waterloo Local Contest, 2006.5.27