已结束 GESP巅峰赛#33
← 上一题 下一题 →

A7333 | 回文区间翻转

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

题目描述

给定两个长度同为 $n$ 的二进制串 $s,t$。

你可以对当前字符串 $s$ 进行若干次操作。每次操作需要选择一段区间 $[l,r]$($1\le l<r\le n$),并满足当前子串 $s_l s_{l+1}\dots s_r$ 是一个回文串。随后,把这段区间内的所有字符按位翻转:

- 0 变成 1
- 1 变成 0

你的目标是在不超过 $2n$ 次操作内,把 $s$ 变成 $t$。

若无法做到,输出 $-1$;否则输出任意一组合法操作。

输入格式

第一行一个整数 $T$,表示测试组数。

对于每组数据:

- 第一行一个整数 $n$;
- 第二行一个二进制串 $s$;
- 第三行一个二进制串 $t$。

输出格式

对每组数据:

- 若无解,输出一行 -1
- 否则先输出一行整数 $k$,表示操作次数;
- 接下来输出 $k$ 行,每行两个整数 $l,r$,表示一次操作。

要求 $0\le k\le 2n$,并且每次操作时所选子串都必须是当时的回文串。

输入输出样例

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