#P3283. Card Hands

    ID: 2284 传统题 2000ms 256MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>字符串后缀数据结构哈希Waterloo Local Contest2006.5.27

Card Hands

题目描述

Jim正在编写一个用于统计分析纸牌游戏的程序。他需要高效地在内存中存储许多不同的牌组。每张牌有四种花色之一和十三种点数之一。在他的实现中,每个牌组以规范顺序存储为链表的卡片:首先按花色排序(所有梅花排在最前面,接着是方块,然后是红心,最后是黑桃)。在每个花色内部,卡片按点数排序:AA, 22, 33, 44, 55, 66, 77, 88, 99, 1010, JJ, QQ, KK。每个牌组中每种牌最多只有一张。

牌组占用了大量内存。因此,Jim决定尝试一种更高效的表示方法。每当任何两个链表共享一个共同的尾部时,它们可以更新为共享该尾部的一个副本,另一个副本可以被丢弃。这个过程可以重复进行,直到没有两个链表共享共同的尾部。

你的任务是告诉Jim需要多少个链表节点来存储所有的牌组。

输入格式

输入包含多个测试用例,以一行00结束。每个测试用例的第一行是牌组的数量。接下来的每行描述一个牌组。每行以一个数字开头,表示该牌组中的卡片数量。接着是卡片列表,以空格分隔,按照上述规范顺序排列。对于每张卡片,先给出点数,然后是花色(CC, DD, HH, 或 SS)。所有牌组中的卡片总数不超过100,000100,000

输出格式

对于每个测试用例,输出一行,表示存储所有链表所需的链表节点数量。

示例输入

3
3 7D AH 5S
4 9C 3D 4D 5S
2 AH 5S
0

示例输出

6

来源

Waterloo Local Contest, 2006.5.27