多边形的三角剖分(Triangulation)是指一组连接多边形顶点的线段,这些线段将多边形分割成若干个三角形。这些线段必须位于多边形内部,且除了在多边形的顶点处外,不能相互交叉。例如:
在上述示例中,粗线表示多边形的轮廓,细线表示三角剖分。对于一个具有 $n$ 个顶点的多边形,任何一种三角剖分都会产生 $(n-2)$ 个三角形。
三角剖分的“三角形计数序列”(triangle count sequence)是通过从某个顶点开始,沿多边形周长绕行,并记录每个顶点所关联的三角形数量而得到的。在上述示例中,从顶部(左侧)顶点开始的三角形计数序列为:
A: $1 \quad 3 \quad 1 \quad 3 \quad 1 \quad 3$
B: $2 \quad 2 \quad 1 \quad 4 \quad 1 \quad 2$
C: $1 \quad 2 \quad 3 \quad 2 \quad 1 \quad 6 \quad 1 \quad 2 \quad 3 \quad 2 \quad 1 \quad 6$
编写一个程序,输入一个包含 $N$ 个正整数的序列,判断该序列是否为某个 $N$ 顶点多边形的三角形计数序列。如果是,请按字典序输出该三角剖分中的所有三角形。
输入格式
输入的第一行包含一个整数 $P$ ($1 \le P \le 1000$),表示随后数据组的数量。每组数据应独立处理。
每组数据由单行输入组成。它包含数据组编号 $K$,后跟数字 $N$ ($4 \le N \le 20$),再后跟序列中的 $N$ 个整数,所有数字均以空格分隔。
输出格式
对于每组数据,输出可能包含多行。如果输入序列不是 $N$ 顶点多边形的三角形计数序列,则输出行包含数据组编号 $K$,后跟一个空格和字母 $N$。如果输入序列是 $N$ 顶点多边形的三角形计数序列,则第一行包含数据组编号 $K$,后跟一个空格和字母 $Y$。接下来的 $(N-2)$ 行,每行包含一个三角形的顶点索引,每个三角形一行,顶点索引按升序排列。这些三角形应按字典序排序,即如果三角形 $(k, l, m)$ 的顶点索引满足 $k < r$ 或者 ($k == r$ 且 $l < s$) 或者 ($k == r$ 且 $l == s$ 且 $m < t$),则三角形 $(k, l, m)$ 排在三角形 $(r, s, t)$ 之前。
样例
样例输入 1
4 1 6 1 3 1 3 1 3 2 6 1 3 2 2 1 3 3 12 1 2 3 2 1 6 1 2 3 2 1 6 4 20 1 2 3 2 1 6 1 2 3 2 1 6 1 3 2 2 1 3 1 2
样例输出 1
1 Y 1 2 6 2 3 4 2 4 6 4 5 6 2 N 3 Y 1 2 12 2 3 12 3 4 6 3 6 12 4 5 6 6 7 8 6 8 9 6 9 12 9 10 12 10 11 12 4 N
(说明:每个数据组输出的第一行已加粗,以便于阅读。)