A115476.回文区间翻转

提高+/省选-

官方

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定两个长度同为 nn 的二进制串 s,ts,t

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

  • 0 变成 1
  • 1 变成 0

你的目标是在不超过 2n2n 次操作内,把 ss 变成 tt

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

输入格式

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

对于每组数据:

  • 第一行一个整数 nn
  • 第二行一个二进制串 ss
  • 第三行一个二进制串 tt

输出格式

对每组数据:

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

要求 0k2n0\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
    

说明/提示

数据范围

  • 1T5×1031 \le T \le 5\times 10^3
  • 4n1004 \le n \le 100
  • 所有测试组的 n2n^2 之和不超过 5×1055 \times 10^5
首页