本題介紹了一種「蠍子」(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$ 開頭($0 \le k_i \le 52$),代表第 $i$ 個牌堆中的牌數,隨後是 $k_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