#CF1932D. D. 卡牌游戏

D. 卡牌游戏

D. 卡牌游戏
每个测试点时间限制:2 秒
每个测试点内存限制:256 兆字节

两名玩家正在玩一个在线卡牌游戏。游戏使用一副 3232 张牌的扑克牌。每张牌有一个点数和一个花色。共有四种花色:梅花(clubs)、方块(diamonds)、红心(hearts)、黑桃(spades)。我们用字符 'C''D''H''S' 分别表示它们。点数共有 88 种,按从小到大顺序为:'2''3''4''5''6''7''8''9'

每张牌用两个字符表示:点数和花色。例如,红心 88 记作 8H

游戏开始时,选择一种花色作为王牌花色(trump suit)。

在每一轮中,玩家按如下方式出牌:

  • 第一名玩家将手牌中的一张牌放在桌上;
  • 第二名玩家必须用自己的一张牌击败这张牌。
    之后,这两张牌都被放入弃牌堆。

一张牌可以击败另一张牌,如果:

  • 两张牌花色相同,且第一张牌的点数大于第二张牌的点数(例如 8S 可以击败 4S);
  • 或者,第一张牌是王牌花色,而第二张牌不是王牌花色(无论点数大小,例如王牌花色是梅花 'C' 时,3C 可以击败 9D)。
    注意:王牌花色只能被点数更大的王牌花色击败。

游戏一共进行了 nn 轮,因此弃牌堆中现在有 2n2n 张牌。你想重建游戏中可能发生的 nn 轮出牌顺序,但弃牌堆中的牌已经被打乱。请找出任意一种可能的 nn 轮出牌顺序。


输入
第一行包含整数 tt1t1001 \le t \le 100)—— 测试用例的数量。
接下来是 tt 个测试用例。
每个测试用例的第一行包含整数 nn1n161 \le n \le 16)。
第二行包含一个字符,表示王牌花色,为 'C''D''H''S' 之一。
第三行包含 2n2n 张牌的描述,每张牌是一个两字符的字符串,第一个字符是点数('2''9'),第二个字符是花色('C''D''H''S')。所有牌互不相同。


输出
对于每个测试用例,输出答案:

  • 输出 nn 行,每行包含两张牌的描述(格式同输入):第一张是第一名玩家出的牌,第二张是第二名玩家用来击败它的牌。
  • 如果无解,输出一行 "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