#P16315. [Ucpc2023初赛]手链

[Ucpc2023初赛]手链

题目描述

有一种魔法手链,由红、蓝、绿三种颜色的珠子首尾相接组成。

可以对手链进行以下两类操作:

  1. 将两个颜色不同且相邻的珠子合并成一个珠子。新珠子的颜色是第三种颜色;
  2. 将一个珠子拆分成两个珠子,拆出的两个珠子分别为另外两种颜色。

每次操作前后,除被合并或拆分的珠子外,其余珠子的相对顺序不变。

如果两个手链通过旋转或翻转后颜色排列相同,则认为它们是同一个手链。

给定两个手链,判断能否通过若干次操作把第一个手链变成与第二个手链相同的手链。若可以,还要输出一组具体操作。

输入格式

第一行包含一个整数 NN 和一个长度为 NN 的字符串,表示第一个手链。

第二行包含一个整数 MM 和一个长度为 MM 的字符串,表示第二个手链。

字符串只包含以下字符:

  • R:红色;
  • B:蓝色;
  • G:绿色。

输出格式

若无法完成变换,输出一行:

-1

否则,第一行输出操作次数 kk

不要求 kk 最小,但必须满足

k10000.k\le 10000.

接下来输出 kk 行操作。

在描述每一次操作时,设当前第一个手链有 LL 个珠子,颜色依次为

c1,c2,,cL.c_1,c_2,\ldots,c_L.

合并操作

格式为:

1 a b

要求:

  • 1a,bL1\le a,b\le L
  • b=a+1b=a+1,或者 a=L,b=1a=L,b=1
  • cacbc_a\ne c_b

两个珠子合并后,新珠子的颜色为三种颜色中除 ca,cbc_a,c_b 外的第三种颜色,记为 cc'

  • b=a+1b=a+1,新序列为

    c1,,ca1,c,ca+2,,cL.c_1,\ldots,c_{a-1},c',c_{a+2},\ldots,c_L.
  • a=L,b=1a=L,b=1,新序列为

    c,c2,,cL1.c',c_2,\ldots,c_{L-1}.

操作后珠子数减少 11

拆分操作

格式为:

2 a x y

其中 x,yx,yRBG 中的字符,并且是被拆珠子颜色之外的另外两种颜色。

允许

0aL+1.0\le a\le L+1.
  • 1aL1\le a\le L,拆分第 aa 个珠子。此时 x,y,cax,y,c_a 两两不同,新序列为

    c1,,ca1,x,y,ca+1,,cL.c_1,\ldots,c_{a-1},x,y,c_{a+1},\ldots,c_L.
  • a=0a=0,拆分原来的第 11 个珠子,要求 x,y,c1x,y,c_1 两两不同。新序列为

    y,c2,,cL,x.y,c_2,\ldots,c_L,x.
  • a=L+1a=L+1,拆分原来的第 LL 个珠子,要求 x,y,cLx,y,c_L 两两不同。新序列为

    y,c1,,cL1,x.y,c_1,\ldots,c_{L-1},x.

操作后珠子数增加 11

执行完所有操作后,第一个手链的颜色序列必须能通过旋转和翻转变成第二个手链的颜色序列。

可以证明,对所有可行输入,都存在不超过 1000010000 次操作的方案。

数据范围

1N,M1000.1\le N,M\le 1000.

样例 1

输入

4 GBBB
3 BBR

输出

3
2 2 R G
1 1 2
1 1 2

样例 2

输入

3 GBR
3 RBG

输出

0