#P14975. [USACO26JAN1] COW Splits B

[USACO26JAN1] COW Splits B

题目描述

给定 Bessie 一个正整数 NN 和一个长度为 3N3N 的字符串 SS,该字符串是由 NN 个长度为 33 的字符串拼接而成,每个字符串都是 COW\texttt{COW} 的一个循环移位。换句话说,每个字符串将是 COW\texttt{COW}OWC\texttt{OWC}WCO\texttt{WCO} 中的一个。

字符串 XX 是一个平方串,当且仅当存在一个字符串 YY 使得 X=Y+YX = Y + Y,其中 ++ 表示字符串拼接。例如,COWCOW\texttt{COWCOW}CC\texttt{CC} 是平方串的例子,但 COWO\texttt{COWO}OC\texttt{OC} 不是。

在一次操作中,Bessie 可以从 SS 中移除任意一个子序列 TT,其中 TT 是一个平方串。一个字符串的子序列是指通过从原字符串中删除若干(可以是零个)字符而得到的字符串。

你的任务是帮助 Bessie 判断是否可能将 SS 转化为空字符串。此外,如果可能,你必须提供一种实现方法。

Bessie 还会收到一个参数 kk,其值为 0011。设 MM 为你构造方案中的操作次数。

  • 如果 k=0k = 0,则 MM 必须等于可能的最小操作次数。
  • 如果 k=1k = 1,则 MM 最多可以比可能的最小操作次数多 11

输入格式

第一行包含 TT,表示独立测试用例的数量(1T1041\le T\le 10^4),以及 kk0k10 \le k \le 1)。

每个测试用例的第一行有 NN1N1051 \le N \le 10^5)。

每个测试用例的第二行有 SS

所有测试用例的 NN 之和不超过 10510^5

输出格式

对于每个测试用例,按照以下流程输出一行或两行。如果不可能将 SS 转化为空字符串,则在一行中输出 1-1

否则,在第一行输出 MM——你构造方案中的操作次数。在第二行,输出 3N3N 个由空格分隔的整数。第 ii 个整数 xx 表示 SS 的第 ii 个字母是在第 xx 次操作中被删除的(1xM1 \le x \le M)。

3 1
3
COWOWCWCO
4
WCOCOWWCOCOW
6
COWCOWOWCOWCOWCOWC
-1
1
1 1 1 1 1 1 1 1 1 1 1 1
3
3 3 2 3 3 2 1 1 1 1 1 1 1 1 1 1 1 1
3 0
3
COWOWCWCO
4
WCOCOWWCOCOW
6
COWCOWOWCOWCOWCOWC
-1
1
1 1 1 1 1 1 1 1 1 1 1 1
2
1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2

提示

对于最后一个测试用例,最优的操作次数是 22,因此任何 M=2M=2M=3M=3 的有效构造方案都会被接受。

对于 M=3M=3,这里是一种可能的构造方案:

  1. 在第一次操作中,移除最后 1212 个字符。现在剩下 COWCOW\texttt{COWCOW}
  2. 在第二次操作中,移除子序列 WW。现在剩下 COCO\texttt{COCO}
  3. 在最后一次操作中,移除所有剩余字符。

  • 输入 33-44T10,N6,k=0T \le 10, N \le 6, k = 0
  • 输入 55-66k=1k = 1
  • 输入 77-1414k=0k = 0

翻译由 DeepSeek V3 完成