#159. 打牌

打牌

打牌

题目背景

比赛开始前,几位同学围在一起讨论扑克牌游戏。

为了避免规则太复杂,大家约定只考虑牌的点数,不考虑花色,并且只允许三种出法。现在给你若干手牌,请判断每一手牌能否在不超过两次出牌内出完。如果可以,你还需要输出任意一种合法方案。

本题采用 Special Judge,合法方案不唯一。

题目描述

一副牌共有 1313 种点数,按从小到大的顺序依次为:

2 3 4 5 6 7 8 9 T J Q K A

其中 T 表示点数 1010。每种点数最多出现 44 次。

一次合法出牌必须是以下三种牌型之一:

  1. 顺子:至少 33 张牌,所有点数互不相同,并且在上面的顺序中连续递增。顺子不能循环,例如 Q K A 合法,但 A 2 3 和 A 2 3 4 5 都不合法。
  2. 三带二:恰好 55 张牌,其中一种点数出现 33 次,另一种不同点数出现 22 次。
  3. 四带一一:恰好 66 张牌,其中一种点数出现 44 次,另外两张牌的点数互不相同,并且都不同于这 44 张牌的点数。

不能出单张、对子、三张、四张,也不能使用题目没有列出的其他牌型。

给定 TT 组手牌。对于每组手牌,请判断是否可以用不超过两次合法出牌把所有牌全部出完。如果可以,输出任意一种合法方案。

输入格式

第一行包含一个整数 TT,表示测试组数。

接下来每组测试数据包含两行:

  • 第一行包含一个整数 nn,表示这一手牌的数量。
  • 第二行包含 nn 个字符串,表示每张牌的点数。每个字符串一定是 2 3 4 5 6 7 8 9 T J Q K A 中的一个。

输出格式

请依次输出每组测试数据的答案,不需要输出测试组编号。

对于每组测试数据:

  • 如果无法用不超过两次合法出牌把所有牌出完,输出一行 No。
  • 否则,先输出一行 Yes,再输出一行整数 xx,表示出牌次数,要求 1≤x≤21 \le x \le 2。接下来输出 xx 行,每行描述一次出牌。

一次出牌的格式必须为以下三种之一:

  • S len p1 p2 ... plen:表示出一个长度为 len 的顺子,其中 len >= 3,且 p1,p2,...,plen 必须是在规定顺序中连续递增的点数。
  • T a b:表示出三带二,其中点数 a 出现 33 次,点数 b 出现 22 次,且 a 与 b 不同。
  • F a b c:表示出四带一一,其中点数 a 出现 44 次,点数 b 和 c 各出现 11 次,且 a,b,c 两两不同。

你输出的所有出牌必须刚好用完该组输入中的所有牌,不能多用或少用。

样例输入

3
8
2 3 4 5 5 5 9 9
5
A 2 3 4 5
6
6 6 6 6 2 3

样例输出

Yes
2
S 3 2 3 4
T 5 9
No
Yes
1
F 6 2 3

样例解释

第一组可以先出顺子 2 3 4,再出三带二 5 5 5 9 9。

第二组虽然形如 A 2 3 4 5,但本题中的顺子不能循环,所以无法一手出完,也不能拆成不超过两手合法牌型。

第三组可以直接出四带一一。

数据范围

对于所有测试数据,满足:

  • 1≤T≤101 \le T \le 10;
  • 1≤n≤521 \le n \le 52;
  • 每张牌的点数合法;
  • 每种点数最多出现 44 次。

子任务

测试点编号 分数 特殊性质 1 特殊性质 2
1∼31 \sim 3 66 数据一定有解,且存在一次出完的方式 T≤10T \le 10
4∼74 \sim 7 88 数据一定有解,且存在只用顺子就出完的方式
8∼118 \sim 11 数据一定有解,且存在只用三带二就出完的方式
12∼1512 \sim 15 数据一定有解,且存在只用四带一一就出完的方式
16∼1916 \sim 19 1212 数据一定有解,且存在不用顺子就出完的方式
20∼2320 \sim 23 数据一定有解,且存在不用三带二就出完的方式
24∼2724 \sim 27 数据一定有解,且存在不用四带一一就出完的方式
28∼3328 \sim 33 2424 无
3434 33 T≤100T \le 100
3535 T≤1000T \le 1000
3636 44 T≤104T \le 10^4