CF1736D Equal Binary Subsequences

题目描述

给你一个长为 $2n$ 的 01 串 $s$ ,你需要将其分成两个相等的子序列。 在此之前你需要执行以下操作一次: - 选一个 $s$ 的子序列(可能为空),然后将其向右循环移位一位。 具体来说,你可以选择一个下标序列 $b_1,b_2,\dots,b_m$ 满足 $1\le b_1

输入格式

每一个测试点有多个测试数据。 第一行一个正整数 $t~(1 \le t \le 10^5)$ 表示测试数据组数。 对于每组数据: 第一行一个正整数 $n~(1 \le n \le 10^5)$,表示 01 串 $s$ 的长度为 $2n$ 。 第二行一个长为 $2n$ 的 01 串 $s$ 。 保证同一测试点中所有数据的 $n$ 的和不超过 $10^5$ 。

输出格式

对于每组数据: 如果无解,输出一行 $-1$ 。 否则: - 第一行输出一个整数 $m$ $(0\le m\le 2n)$ ,接着升序输出 $m$ 个下标 $b_1,b_2,\dots,b_m$ 。 - 第二行升序输出 $n$ 个下标 $p_1,p_2,\dots,p_n$ (见 Hint) 。 如果有多解,输出任意一个。 $s$ 的下标从 $1$ 开始。

说明/提示

在第二个测试数据中,$b[]=\{3,5\}$ 。初始时 $s_3=0,s_5=1$ 。进行操作时,我们同时令 $s_3=1,s_5=0$ 。然后 $s$ 变成了 $101000$ 。现在我们选择 $p[]=\{1,2,5\}$ ,那么 $s^p=100$ ;自然 $q[]=\{3,4,6\}$ ,于是 $s^q=100$ 。$s^p=s^q$ 。