#CF1932D. D. 卡牌游戏
D. 卡牌游戏
D. 卡牌游戏
每个测试点时间限制:2 秒
每个测试点内存限制:256 兆字节
两名玩家正在玩一个在线卡牌游戏。游戏使用一副 张牌的扑克牌。每张牌有一个点数和一个花色。共有四种花色:梅花(clubs)、方块(diamonds)、红心(hearts)、黑桃(spades)。我们用字符 'C'、'D'、'H'、'S' 分别表示它们。点数共有 种,按从小到大顺序为:'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'。
每张牌用两个字符表示:点数和花色。例如,红心 记作 8H。
游戏开始时,选择一种花色作为王牌花色(trump suit)。
在每一轮中,玩家按如下方式出牌:
- 第一名玩家将手牌中的一张牌放在桌上;
- 第二名玩家必须用自己的一张牌击败这张牌。
之后,这两张牌都被放入弃牌堆。
一张牌可以击败另一张牌,如果:
- 两张牌花色相同,且第一张牌的点数大于第二张牌的点数(例如
8S可以击败4S); - 或者,第一张牌是王牌花色,而第二张牌不是王牌花色(无论点数大小,例如王牌花色是梅花
'C'时,3C可以击败9D)。
注意:王牌花色只能被点数更大的王牌花色击败。
游戏一共进行了 轮,因此弃牌堆中现在有 张牌。你想重建游戏中可能发生的 轮出牌顺序,但弃牌堆中的牌已经被打乱。请找出任意一种可能的 轮出牌顺序。
输入
第一行包含整数 ()—— 测试用例的数量。
接下来是 个测试用例。
每个测试用例的第一行包含整数 ()。
第二行包含一个字符,表示王牌花色,为 'C'、'D'、'H'、'S' 之一。
第三行包含 张牌的描述,每张牌是一个两字符的字符串,第一个字符是点数('2' 到 '9'),第二个字符是花色('C'、'D'、'H'、'S')。所有牌互不相同。
输出
对于每个测试用例,输出答案:
- 输出 行,每行包含两张牌的描述(格式同输入):第一张是第一名玩家出的牌,第二张是第二名玩家用来击败它的牌。
- 如果无解,输出一行
"IMPOSSIBLE"。 - 如果有多个解,输出任意一个。
示例
输入:
8
3
S
3C 9S 4C 6D 3S 7S
2
C
3S 5D 9S 6H
1
H
6C 5D
1
S
7S 3S
1
H
9S 9H
1
S
9S 9H
1
C
9D 8H
2
C
9C 9S 6H 8C
输出:
3C 4C
6D 9S
3S 7S
IMPOSSIBLE
IMPOSSIBLE
3S 7S
9S 9H
9H 9S
IMPOSSIBLE
6H 9C
9S 8C