给定两个 $1$ 到 $N$ 的排列 $P$ 和 $Q$。你的分数 $S$ 初始化为 $\text{inversions}(P)^\dagger$。
你可以进行最多 $10 \cdot N$ 次以下操作: * 选择任意满足 $1 \le x \le N$ 的整数 $x$。从 $P$ 中删除 $x$,然后将 $x$ 插入到 $P$ 中的任意位置。将 $S$ 更新为 $\max(S, \text{inversions}(P))$。
你的目标是将 $P$ 变为 $Q$,同时最小化最终的 $S$ 值。此外,请输出所执行的操作。 注意:你不需要最小化操作次数。
$\dagger \text{inversions}(P)$ 表示满足 $1 \le i < j \le N$ 且 $P_i > P_j$ 的数对 $(i, j)$ 的数量。
输入格式
- 第一行包含一个整数 $T$,表示测试用例的数量。
- 每个测试用例包含三行输入:
- 第一行包含 $N$,即排列的长度。
- 第二行包含 $N$ 个整数 $P_1, P_2, \dots, P_N$,表示排列 $P$。
- 第三行包含 $N$ 个整数 $Q_1, Q_2, \dots, Q_N$,表示排列 $Q$。
输出格式
对于每个测试用例,输出如下: 首先,在新的一行输出 $K$ ($0 \le K \le 10 \cdot N$),表示你希望执行的操作次数。 接下来的 $K$ 行,每行包含两个空格分隔的整数: $x$ ($1 \le x \le N$):在此操作中选择删除并重新插入的数字; $pos$ ($1 \le pos \le N$):重新插入 $x$ 的位置。注意,删除 $x$ 后剩余 $N-1$ 个元素。$pos = i$ 表示我们将 $x$ 重新插入到第 $i$ 个元素之前,$pos = N$ 表示我们将它插入到末尾。
数据范围
- $1 \le T \le 100$
- $1 \le N \le 500$
- $1 \le P_i, Q_i \le N$
- 对于所有 $i \neq j$,$P_i \neq P_j$
- 对于所有 $i \neq j$,$Q_i \neq Q_j$
- 所有测试用例的 $N$ 之和不超过 $500$。
样例
样例输入 1
3 2 1 2 2 1 3 1 2 3 1 2 3 3 2 1 3 3 1 2
样例输出 1
1 1 2 0 2 1 1 3 1
说明
测试用例 1:初始时,$S = 0$,因为 $\text{inversions}([1, 2]) = 0$。 我们执行一次操作,即删除 $1$ 并将其重新插入到第 $2$ 个位置。 这会将排列变为 $[2, 1]$,$S$ 更新为 $\max(0, \text{inversions}([2, 1])) = 1$。 我们已成功将 $P$ 转换为 $Q$,并且可以证明不可能获得更低的分数。
测试用例 3:我们展示步骤: 初始条件:$P = [2, 1, 3], S = 1$。 删除 $1$ 并重新插入到位置 $1$:$P = [1, 2, 3], S = 1$。 * 删除 $3$ 并重新插入到位置 $1$:$P = [3, 1, 2], S = 2$。