题库练习 Palindrome Flipping
← 上一题 下一题 →

A16704 | Palindrome Flipping

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

给定两个长度均为 $n$ 的 $01$ 串 $s$ 和 $t$。你可以进行如下操作:

- 选择下标 $l,r\,(1 \leq {\color{red}{l < r}} \leq n)$,使得子串 $s_{l,r}$ 是回文串,并将该子串内所有位反转。

目标是通过上述操作最多 $2n$ 次(可以为零次)后,使得 $s$ 与 $t$ 相等。

字符串 $s$ 的子串 $s_{l,r}$ 指的是 $s$ 第 $l$ 位到第 $r$ 位(含端点)的连续字符子序列,其中 $1 \leq l < r \leq |s|$。这里 $|s|$ 表示字符串 $s$ 的长度。

回文串是指正着和反着读都一样的字符串。例如,$\texttt{101}$ 和 $\texttt{00}$ 是回文串,而 $\texttt{10}$ 不是。

反转子串的所有位,意为把 $\texttt{0}$ 变为 $\texttt{1}$,$\texttt{1}$ 变为 $\texttt{0}$。例如,反转 $\texttt{101}$ 得到 $\texttt{010}$。

输入格式

每个测试点包含多个测试用例。第一行为用例数 $T$($1 \leq T \leq 5\cdot 10^3$)。接下来是每个用例的描述。

每个用例第一行为一个整数 $n$($4 \leq n \leq 100$),表示字符串 $s$ 和 $t$ 的长度。

接下来两行分别为二进制字符串 $s$ 和 $t$。

保证所有用例的 $n^2$ 之和不超过 $5\cdot 10^5$。

输出格式

对于每组测试数据,如果无法完成目标,输出 $-1$。

否则,第一行输出一个整数 $k$($0 \leq k \leq 2n$),表示操作次数。

接下来的 $k$ 行,每行输出两个整数 $l, r$($1 \leq l < r \leq n$),表示每次操作时选取的下标。注意,在每次操作时,$s_{l,r}$ 必须是当时的回文串。

输入输出样例

输入 #1
3
5
01011
10000
7
1010101
0101010
4
0010
0010
输出 #1
2
1 3
3 5
1
1 7
0
C++ 编辑器
输入
输出