CF1889A Qingshan Loves Strings 2
题目描述
我们称长度为 $ k $ 的01串 $ a $ 是**好的**且仅当
- $ \forall i \in \left [ 1,k \right ], a_i \ne a_{k-i+1}$
比如,$ \texttt{10} $ , $ \texttt{1010} $ , $ \texttt{111000} $ 是好的,而 $ \texttt{11} $ , $ \texttt{101} $ , $ \texttt{001} $ , $ \texttt{001100} $ 不是好的。
现在给你一个01串 $ s $,你可以执行不多于 $ 300 $ 次以下操作使得 $ s $ 变为好的(次数可以为 $ 0 $):
- $ \text{插入} \texttt{01} \text{到} s \text{的任意位置} $
请你判断是否有解,并在有解的情况下输出操作次数和每个操作的插入位置。
输入格式
采用多组测试。
第一行输入一个整数 $ t $ ( $ 1\le t\le 100 $ ) 表示测试组数。
每组数据的第一行输入一个整数 $ n $ ( $ 1 \le n\le 100 $ ) 表示01串 $ s $ 的长度。
每组数据的第二行输入一个长度为 $ n $ 的01串 $ s $。
输出格式
对于每组数据,如果无法使 $ s $ 变好,输出一行一个 $ -1 $。
否则,输出 $ p $ ( $ 0 \le p \le 300 $ ) 表示操作总数。
接下来,输出 $ p $ 个整数 $ x_i $ ( $ 0 \le x_i \le n+2i-2 $ ) 表示操作位置。当 $ x_i = 0 $ 时表示插入$ \texttt{01} $到 $ s $ 开头,否则表示插入到 $ s $ 的第 $ x_i $ 项后面。
可以证明,在此问题的约束下,如果有答案存在,那么总有一个答案仅需要 $ 300 $ 次以下的操作数便可以完成。
**样例 1**
**样例输入 1**
```
6
2
01
3
000
4
1111
6
001110
10
0111001100
3
001
```
**样例输出 1**
```
0
-1
-1
2
6 7
1
10
-1
```
说明/提示
在第一组样例中,你不需要进行任何操作就可以使 $ s $ 为好的01串。
另一种方法是插入$\texttt{01}$到第 $ 1 $ 项后面,即:
1. $ \texttt{0}\underline{\texttt{01}}\texttt{1} $
最终 $ s = \texttt{0011} $,是好的01串。
在第二组样例中,没有办法使 $ s $ 变好。
在第四组样例中,你可以进行如下操作:
1. $ \texttt{001110}\underline{\texttt{01}} $
2. $ \texttt{0011100}\underline{\texttt{01}}\texttt{1} $
最终 $ s = \texttt{0011100011} $,是好的01串。