#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 3A 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,表示出牌次数,要求 1x21 \le x \le 2。接下来输出 xx 行,每行描述一次出牌。

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

  • S len p1 p2 ... plen:表示出一个长度为 len 的顺子,其中 len >= 3,且 p1,p2,...,plen 必须是在规定顺序中连续递增的点数。
  • T a b:表示出三带二,其中点数 a 出现 33 次,点数 b 出现 22 次,且 ab 不同。
  • F a b c:表示出四带一一,其中点数 a 出现 44 次,点数 bc 各出现 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,但本题中的顺子不能循环,所以无法一手出完,也不能拆成不超过两手合法牌型。

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

数据范围

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

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

子任务

测试点编号 分数 特殊性质 1 特殊性质 2
131 \sim 3 66 数据一定有解,且存在一次出完的方式 T10T \le 10
474 \sim 7 88 数据一定有解,且存在只用顺子就出完的方式
8118 \sim 11 数据一定有解,且存在只用三带二就出完的方式
121512 \sim 15 数据一定有解,且存在只用四带一一就出完的方式
161916 \sim 19 1212 数据一定有解,且存在不用顺子就出完的方式
202320 \sim 23 数据一定有解,且存在不用三带二就出完的方式
242724 \sim 27 数据一定有解,且存在不用四带一一就出完的方式
283328 \sim 33 2424
3434 33 T100T \le 100
3535 T1000T \le 1000
3636 44 T104T \le 10^4