#P15184. [hacker2025R3]Bitstring Botcheck

[hacker2025R3]Bitstring Botcheck

题目描述

为了确保反抗军通信发生在人类之间,验证码难度被大幅提高。每个反抗军成员若想证明自己是人类并联系基地,就必须解决下面的谜题。

给定一个长度为 2N2N 的二进制串 SS,你需要用不超过 10N10N 次如下操作,把它按非降序排序。

一次操作定义如下:

  1. 将下标集合 [1,2,3,,2N][1,2,3,\ldots,2N] 划分成两个升序数组 AABB,二者长度都为 NN。每个下标必须且只能被分配到 AABB 中之一。
  2. 对每个 i=1..Ni=1..N,交换 SAiS_{A_i}SBiS_{B_i}

如果可以在不超过 10N10N 次操作内将二进制串按非降序排序,请输出任意一种方案。若不可能,请输出 1-1

输入格式

输入第一行包含一个整数 TT,表示测试用例数。

对于每个测试用例:

第一行包含一个整数 NN

第二行包含长度为 2N2N 的二进制串 SS

输出格式

对于第 ii 个测试用例:

若可以在不超过 10N10N 次操作内排序,输出:

Case #i: M

其中 MM 为操作次数,且 M10NM\le 10N

接下来输出 MM 对行,共 2M2M 行。每一对行表示一次操作:

  • 第一行包含 NN 个空格分隔的整数,表示数组 AA
  • 第二行包含 NN 个空格分隔的整数,表示数组 BB

数组 AABB 都必须严格递增,并且共同构成 12N1\sim 2N 的一个划分。

若不能在不超过 10N10N 次操作内排序,输出:

Case #i: -1

数据范围

  • 1T801\le T\le 80
  • 3N1503\le N\le 150
  • S=2N|S|=2N
  • Si{0,1}S_i\in\{\texttt{0},\texttt{1}\}

样例输入

5
3
101000
3
101010
3
100100
3
011001
3
011010

样例输出

Case #1: 4
1 3 5
2 4 6
1 2 3
4 5 6
1 3 4
2 5 6
1 2 3
4 5 6
Case #2: 3
1 2 5
3 4 6
1 2 3
4 5 6
1 3 4
2 5 6
Case #3: 2
1 3 5
2 4 6
1 2 3
4 5 6
Case #4: 2
1 2 3
4 5 6
1 3 5
2 4 6
Case #5: 2
1 2 3
4 5 6
1 2 5
3 4 6

样例解释

第一个样例中,N=3N=3S=101000S=\texttt{101000},可以通过如下操作排序:

  1. 交换 A=[1,3,5]A=[1,3,5]B=[2,4,6]B=[2,4,6] 中对应位置。被选入 AA 的位置用方括号标出:

    [1]0[1]0[0]0 -> 010100
    
  2. 交换 A=[1,2,3]A=[1,2,3]B=[4,5,6]B=[4,5,6]

    [0][1][0]100 -> 100010
    
  3. 交换 A=[1,3,4]A=[1,3,4]B=[2,5,6]B=[2,5,6]

    [1]0[0][0]10 -> 011000
    
  4. 交换 A=[1,2,3]A=[1,2,3]B=[4,5,6]B=[4,5,6]

    [0][1][1]000 -> 000011