本题介绍了一种名为“蝎子”(Scorpion)的纸牌接龙游戏的变体。
你将获得一副 52 张的扑克牌,这些牌被分发到七个列中。每一列可以有任意数量的牌,包括某些列中没有牌的情况(我们称这些列为空)。每张牌都有花色($\diamondsuit, \heartsuit, \spadesuit$ 或 $\clubsuit$)和点数(按递增顺序为:A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K)。
在每一回合中,你可以执行以下操作:选择某一列中的当前牌(你可以选择任意一张),将其连同其上方所有的牌一起移动到另一列的最底端牌上(列的底部部分作为一个整体移动)。你只能将当前牌移动到花色相同且点数恰好大 1 的牌上。例如,$5\spadesuit$ 只能移动到 $6\spadesuit$ 上,$A\heartsuit$ 只能移动到 $2\heartsuit$ 上,如下图所示。如果当前牌的点数是 K,则只允许将其(连同其上方的所有牌)移动到空列上,且前提是它必须位于另一张牌之上(即不能是列顶部的牌)。
游戏的目标是构建 4 列从 K 到 A 的同花色序列(K 在列顶,A 在列底)。
输入格式
输入包含 7 行,第 $i$ 行描述第 $i$ 列。第 $i$ 行以整数 $k_i$ 开头,表示第 $i$ 列中的牌数($0 \le k_i \le 52$),随后是 $k_i$ 个双字符字符串,描述从上到下第 $i$ 列中的牌。第一个字符表示点数(“A”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “T”, “J”, “Q” 和 “K” 分别对应 A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q 和 K),第二个字符表示花色(“D”, “H”, “S” 和 “C” 分别对应 $\diamondsuit, \heartsuit, \spadesuit$ 和 $\clubsuit$)。
保证输入数据包含所有 52 张牌,且每张牌恰好出现一次。
输出格式
如果无法赢得游戏,输出“NO”。否则,在第一行输出“YES”,在第二行输出移动次数,在第三行按操作顺序输出移动的牌。如果有多种解法,输出其中任意一种。
样例
输入 1
14 KD QD JD TD 9D 8D 7D 6D 5D 4D 3D 2D AD KH 12 AS 6C 5C 4C 3C 2C AC 6S 5S 4S 3S 2S 11 KS QS JS TS 9S 8S 7S 5H 4H 3H 2H 1 KC 0 11 8H 7H 6H QC JC TC 9C 8C 7C QH JH 3 AH TH 9H
输出 1
YES 10 QH 6C AS KH AH QC 5H 6S TH 8H
输入 2
5 JH TH 9H JC AH 2 KH QH 6 6H 2C AC KD 8H 7H 6 QD JD 4H 3H KC QC 10 3S 2S AS 8S 7S 6S 5S 4S QS JS 12 3C TC 9C 8C 7C 6C 5C 4C KS TS 9S 2H 11 TD 9D 8D 7D 6D 5D 4D 3D 2D AD 5H
输出 2
YES 20 JH KD 6H KS JC 8H QD KC 2H TS QS 8S 3S AH TC 3C 2C 5H 4H TD