纸牌接龙(Solitaire)有很多种变体,但大多数都需要一个可以铺开纸牌的区域。这里有一种只需将牌叠拿在手中即可进行的玩法。
该游戏使用一副标准的 52 张牌,每张牌有 4 种花色——黑桃 (S)、红桃 (H)、方块 (D) 或梅花 (C),以及 13 种点数——Ace (A)、2、3、4、5、6、7、8、9、10 (T)、Jack (J)、Queen (Q)、King (K)。游戏开始时,你将牌叠正面朝下拿在手中,从牌叠底部开始向上翻牌,使牌正面朝上。每当你翻开一张牌时,检查它是否与之前已翻开的牌中位于其前三个位置的牌点数或花色相同。如果点数相同,你移除这两张牌以及它们之间的两张牌;如果花色相同,你仅移除这两张牌。这些操作可能会引发连锁反应,因为现在剩余的已翻开牌中,可能又有牌与其前三个位置的牌点数或花色相同。(关于处理连锁反应的详细规则见下文。)一旦连锁反应中的所有操作执行完毕(其中一些操作可能会强制引发更多的连锁反应),你再翻开下一张牌。如果在遍历牌叠的过程中所有牌都被移除,你就赢了!
下表展示了一个示例游戏的开始过程:假设前七张翻开的牌依次是 TH、4C、KS、AD、2S 和 8H。下表显示了游戏中接下来的几个动作——当花色或点数匹配时,它们会被标记出来。注意,翻开 8S 会导致两次连锁动作。
| 翻开的牌 | 手牌 | 动作 |
|---|---|---|
| — | TH 4C KS AD 2S 8H | 无 |
| 5D | TH 4C KS AD 2S 8H 5D | 移除 AD, 5D |
| 6D | TH 4C KS 2S 8H 6D | 无 |
| 8S | TH 4C KS 2S 8H 6D 8S | 移除 2S, 8S |
| — | TH 4C KS 8H 6D | 移除 TH, 8H |
| 9H | 4C KS 6D 9H | 无 |
| KC | 4C KS 6D 9H KC | 移除 KS, 6D, 9H, KC |
| 2C | 4C 2C | 无 |
如果在连锁反应中存在多种可选动作,你应该优先选择移除四张相邻牌的动作,而不是移除两张非相邻牌的动作。如果多个可能的动作移除的牌数相同,则选择移除最近翻开的那张牌的动作。例如,如果示例中 6D 换成 6C,那么在表中第五行,被移除的将是 4C 和 6C,而不是 TH 和 8H。
你的任务是:给定翻牌的顺序,确定游戏结束时剩余的牌。
输入格式
输入包含四行,每行包含 13 张牌。牌出现的顺序即为游戏中翻开的顺序。每张牌由两个连续字符表示,第一个字符表示牌的点数(从 A, 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K 中选择),第二个字符表示牌的花色(从 S, H, D, C 中选择)。相邻的牌之间用单个空格分隔。
输出格式
输出游戏结束时剩余牌的数量,随后输出剩余的牌,格式与输入部分描述的相同。
样例
样例输入 1
TC 2C 6C TS KC QS QC 3C KD 8D JH JS KH 5D JD 2S 8S AS 9S 3D 5H 9C AH 4D 4C KS JC 4S 7S 6D 2H 7C 8C 7D AD 7H TH 2D QH 8H 9H 5C TD 3S 6H 3H QD 5S 9D 4H 6S AC
样例输出 1
2 3S 9D