#1439. Swap to Win
Swap to Win
描述
农夫约翰拥有目标字符串 t(长度为 M)和 N 个长度均为 M 的字符串 s₁, s₂, ..., sₙ。他可以执行两类操作:
- 类型 1:在某个字符串 sₓ 中交换第 p 位和第 q 位的字符(1 ≤ p, q ≤ M);
- 类型 2:在第 k 位(1 ≤ k ≤ M)上,交换两个不同字符串 sₓ 和 sᵧ 的该位置字符。 目标是通过至多 2M 次操作,使 s₁ 变为与 t 完全相同。保证有解。
输入输出格式
输入
第一行一个整数 T(测试用例数,1 ≤ T ≤ 10)。对每个测试用例:
- 第一行两个整数 N 和 M(1 ≤ N, M ≤ 1000);
- 第二行一个长度为 M 的小写字符串 t;
- 接下来 N 行,每行一个长度为 M 的小写字符串 sᵢ(i = 1..N)。
输出
对每个测试用例:
- 第一行输出一个整数 K(操作总数,K ≤ 2M);
- 接下来 K 行,每行描述一次操作:
- 若为类型 1:输出
1 x p q,表示在 sₓ 中交换第 p 位与第 q 位(1-indexed); - 若为类型 2:输出
2 x y k,表示交换 sₓ 与 sᵧ 在第 k 位上的字符(x ≠ y)。
- 若为类型 1:输出
样例
1
3 4
abcd
wxyz
pqrs
klmn
4
2 1 2 1
2 1 3 2
2 1 2 3
2 1 3 4
限制
- 1 ≤ T ≤ 10
- 1 ≤ N, M ≤ 1000
- 所有字符串均由小写字母组成
- 保证存在不超过 2M 次操作的可行解
- 输出操作数 K 必须满足 K ≤ 2M,且所有操作下标均合法(如 p,q ∈ [1,M],x,y ∈ [1,N] 且 x≠y,k ∈ [1,M])