luogu#P2377. 三角形图

三角形图

题目背景

请在 这里 查看原题面。

题目描述

UNowen 有 nn平面向量 {Ln}\{\bm L_n\},其中:

  • L1=L2==Ln=1|\bm L_1|=|\bm L_2|=\ldots=|\bm L_n|=1
  • L1+L2++Ln=0\bm L_1+\bm L_2+\ldots+\bm L_n=\bm 0
  • 对于任意正整数 1i,jn1 \le i,j \le n,总存在整数 kk 使得 Li,Lj=kπ3\langle\bm L_i,\bm L_j\rangle=\dfrac{k\pi}{3};(kπ3=k×60\dfrac{k\pi}{3}=k \times 60^\circ
  • 除了整个向量序列以外(下同),向量序列中不存在和为 0\bm 0 的一段。

此处 X,Y\langle\bm X,\bm Y\rangle 代指「将 X\bm X 旋转至与 Y\bm Y 同向所旋转的角度」,逆时针为正角,顺时针为负角(例如,设 X=(22,22)\bm X=(\dfrac{\sqrt{2}}{2},\dfrac{\sqrt{2}}{2})Y=(1,0)\bm Y=(1,0),则 X,Y=π4\langle\bm X,\bm Y\rangle=-\dfrac{\pi}{4})。

也就是说,这 nn 个向量的长度(模)均为 11,并且首尾拼接可以得到一个封闭多边形。保证这个封闭多边形的各个内角均为 π3\dfrac{\pi}{3} 的正整数倍,内部没有其他向量,并且不是空心的。

为了表述方便,我们用一个长度为 nn,字符集为 {a,b,c,d,e,#}\{\tt a,\tt b,\tt c,\tt d,\tt e,\#\} 的字符串 SS 来描述 {Ln}\{\bm L_n\}

具体地,对于 SS 的第 ii 个字符(特别地,L0\bm L_0 等价于 Ln\bm L_nLn+1\bm L_{n+1} 等价于 L1\bm L_1,下同):

字符 含义
a\tt a Li,Li+1=2π3\langle\bm L_i,\bm L_{i+1}\rangle=\dfrac{2\pi}{3}
b\tt b Li,Li+1=π3\langle\bm L_i,\bm L_{i+1}\rangle=\dfrac{\pi}{3}
c\tt c Li,Li+1=0\langle\bm L_i,\bm L_{i+1}\rangle=0
d\tt d Li,Li+1=π3\langle\bm L_i,\bm L_{i+1}\rangle=-\dfrac{\pi}{3}
e\tt e Li,Li+1=2π3\langle\bm L_i,\bm L_{i+1}\rangle=-\dfrac{2\pi}{3}
#\tt \# Li,Li+1=π\vert\langle\bm L_i,\bm L_{i+1}\rangle\vert=\pi

此外,UNowen 按如下方式定义一个向量序列 {L1,L2,,Ln}\{\bm L_1,\bm L_2,\ldots,\bm L_n\} 的「标准表示」:

  • 分别对于 l=1,2,,nl=1,2,\ldots,n,求出向量序列 $\{\bm L_l,\bm L_{l+1},\ldots,\bm L_n,\bm L_1,\bm L_2,\ldots,\bm L_{l-1}\}$ 对应的字符串:
  • nn 个字符串中字典序最小的字符串作为向量序列 {L1,L2,,Ln}\{\bm L_1,\bm L_2,\ldots,\bm L_n\} 的「标准表示」。

例如,上图中向量序列的「标准表示」是 S=abcedcdcdddeS=\texttt{abcedcdcddde},而不能是 S=dcdcdddeabceS=\texttt{dcdcdddeabce}

现在,UNowen 把向量序列 {L1,L2,,Ln}\{\bm L_1,\bm L_2,\ldots,\bm L_n\} 对应的字符串 SS(不一定是「标准表示」)给了你。他希望你可以按如下方式对这个向量序列进行一次修改:

  • 选定一个正整数 1kn1 \le k \le n
  • 构造两个平面向量 X,Y\bm X,\bm Y,使得:
    • X=1|\bm X|=1
    • Y=1|\bm Y|=1
    • Lk,X=π3\langle\bm L_k,\bm X\rangle=\dfrac{\pi}{3}
    • Lk,Y=π3\langle\bm L_k,\bm Y\rangle=-\dfrac{\pi}{3}
  • X,Y\bm X,\bm Y 两项(X\bm X 在前,Y\bm Y 在后)替换 Lk\bm L_k
  • Lk1+X=0\bm L_{k-1}+\bm X=\bm 0,删除 Lk1,X\bm L_{k-1},\bm X
  • Lk+1+Y=0\bm L_{k+1}+\bm Y=\bm 0,删除 Lk+1,Y\bm L_{k+1},\bm Y
  • 若修改后的向量序列中存在和为 0\bm 0 的一段(除了整个向量序列以外),那么 UNowen 称这次修改是不合法的。例如,在下面的图片中,如果选择 k=3k=3,那么修改就是不合法的。
  • UNowen 会将修改后的向量序列的「标准表示」定义为该次修改的「修改结果」。
  • 对于任意两个修改方案,如果修改后的向量序列首尾拼接得到的图形全等,那么 UNowen 会认为这两个修改方案是等价的。例如,在下面的图片中,k=1k=1k=2k=2 的两个修改方案就是等价的。
  • 也就是说,修改操作会对封闭多边形上的某个向量向外作等边三角形,使得修改后的图形仍为满足上述要求(各个内角均为 π3\dfrac{\pi}{3} 的正整数倍,内部没有其他向量,并且不是空心的)的封闭多边形。对于任意两个修改方案,如果修改后的向量序列首尾拼接得到的图形全等,那么它们是等价的。

请求出互不等价的合法的修改方案的个数,并按字典序从小到大输出每个修改方案的「修改结果」。

输入格式

本题有多组数据。

第一行一个正整数 TT,表示数据组数。

下面 TT 行,每行一个字符集为 {a,b,c,d,e}\{\tt a,\tt b,\tt c,\tt d,\tt e\} 的非空字符串 SS。保证 #\tt \# 不会出现。

输出格式

对于每组数据,输出三行:

第一行一个正整数 KK,表示,并按字典序从小到大输出每个修改方案。

第二行 KK 个字符集为 {a,b,c,d,e}\{\tt a,\tt b,\tt c,\tt d,\tt e\} 的非空字符串(用空格隔开),表示每个可能出现的「修改结果」。你需要按字典序从小到大的顺序输出它们。可以证明 #\tt \# 不会出现。

第三行是空行。请特别注意这一点,因为它不符合传统题的一般数据格式。

2
eee
cedde

1
dede

3
beddde cdecde cecece

2
adeccecced
dddddd

5
acedccecced addebcecced adebebecced adecbedcced cceccecce

1
cddddce

7
eee
cedde
adeccecced
dddddd
ccdeccde
baedddcdde
abcedcdcddde
1
dede

3
beddde cdecde cecece

5
acedccecced addebcecced adebebecced adecbedcced cceccecce

1
cddddce

4
bcdeccdde bcedccece bdeccdebe cccedccde

8
abdecdcddde abececcddde abedcebddde abeddbecdde abeddccecde abeddcdcece abeddcddced addddcdde

10
abbeddcdcddde abcdeccdcddde abcecebdcddde abcedbeccddde abcedccebddde abcedcdbecdde abcedcdccecde abcedcdcdcece abcedcdcddced acedcdcdddd

提示

S|S| 为字符串 SS 的长度。

对于 30%30\% 的数据,T5T \le 5S9|S| \le 9

对于 50%50\% 的数据,保证所有的修改方案都是合法的。

对于 100%100\% 的数据,1T1001 \le T \le 1003S753 \le |S| \le 75