CF1243B2 Character Swap (Hard Version)
题目描述
本题与简单版本不同。在本版本中,Ujan 最多可以进行 $2n$ 次交换操作。此外,$k \leq 1000$,$n \leq 50$,并且需要输出具体的交换操作。如果你解决了本题,可以对本题进行 hack。但只有同时解决了本题和前一题,才能对前一题进行 hack。
经过多次尝试和失败后,Ujan 决定再次整理他的房子。他首先决定整理好他的字符串。
Ujan 有两个长度为 $n$ 的不同字符串 $s$ 和 $t$,它们只包含小写英文字母。他希望将这两个字符串变得相同。由于 Ujan 很懒,他最多会进行 $2n$ 次如下操作:他选择两个位置 $i$ 和 $j$($1 \leq i, j \leq n$,$i$ 和 $j$ 可以相同也可以不同),然后交换 $s_i$ 和 $t_j$ 这两个字符。
Ujan 的目标是让字符串 $s$ 和 $t$ 变得完全相同。他不需要让操作次数最少:任何长度不超过 $2n$ 的操作序列都是可以接受的。
输入格式
第一行包含一个整数 $k$($1 \leq k \leq 1000$),表示测试用例的数量。
对于每个测试用例,第一行包含一个整数 $n$($2 \leq n \leq 50$),表示字符串 $s$ 和 $t$ 的长度。
接下来的两行分别为字符串 $s$ 和 $t$,每个字符串长度恰好为 $n$,且只包含小写英文字母。保证两个字符串不同。
输出格式
对于每个测试用例,如果 Ujan 能够在不超过 $2n$ 次操作内将两个字符串变得相同,输出 "Yes";否则输出 "No"。你可以用任意大小写输出字母。
如果输出 "Yes",则在下一行输出一个整数 $m$($1 \leq m \leq 2n$),表示将两个字符串变得相同所需的交换操作次数。接下来的 $m$ 行,每行输出两个整数 $i, j$($1 \leq i, j \leq n$),表示在对应操作中 Ujan 交换 $s_i$ 和 $t_j$。你不需要让操作次数最少,任何长度不超过 $2n$ 的操作序列都是可以接受的。
说明/提示
由 ChatGPT 4.1 翻译