CF2101B Quartet Swapping
题目描述
给定一个长度为 $n$ 的排列 $a$ $^{\text{∗}}$。你可以进行以下操作任意次数(包括零次):
- 选择一个下标 $1 \le i \le n - 3$。然后,同时交换 $a_i$ 和 $a_{i+2}$,以及 $a_{i+1}$ 和 $a_{i+3}$。换句话说,排列 $a$ 将从 $[\ldots, a_i, a_{i+1}, a_{i+2}, a_{i+3}, \ldots]$ 变为 $[\ldots, a_{i+2}, a_{i+3}, a_i, a_{i+1}, \ldots]$。
请确定通过任意次上述操作后能得到的字典序最小的排列 $^{\text{†}}$。
$^{\text{∗}}$ 一个长度为 $n$ 的排列是由 $1$ 到 $n$ 的 $n$ 个不同整数按任意顺序组成的数组。例如,$[2,3,1,5,4]$ 是一个排列,但 $[1,2,2]$ 不是排列(因为 $2$ 出现了两次),$[1,3,4]$ 也不是排列($n=3$ 但数组中出现了 $4$)。
$^{\text{†}}$ 对于两个相同长度的数组 $x$ 和 $y$,$x$ 字典序小于 $y$ 当且仅当满足以下条件:
- 在第一个 $x$ 和 $y$ 不同的位置,$x$ 的元素小于 $y$ 的对应元素。
输入格式
多组数据,第一行一个整数 $t(1\le t\le 1000)$。
对于每组数据,第一行一个整数 $n(4\le n\le 2\times 10^5)$。\
第二行 $n$ 个整数 $a_1,a_2,\cdots,a_n(1\le a_i\le n)$,保证 $a$ 为 $1$ 到 $n$ 的排列。
保证所有测试点的 $n$ 之和不超过 $2\times 10^5$。
输出格式
对于每组数据,输出一行 $n$ 个整数,表示可以得到的字典序最小的排列。
说明/提示
**样例解释**
第一组数据中,选择 $i=1$ 执行一次操作,排列变为 $[1,2,3,4]$,可以证明这是可以得到的字典序最小的排列。
第二组数据中,一种可以得到字典序最小的排列的操作如下:
- 选择 $i=2$ 执行一次操作,排列变为 $[5,1,2,4,3]$;
- 选择 $i=1$ 执行一次操作,排列变为 $[2,4,5,1,3]$;
- 选择 $i=2$ 执行一次操作,排列变为 $[2,1,3,4,5]$。