#ATarc167d. [ARC167D] Good Permutation

[ARC167D] Good Permutation

题目描述

在本题中,提到“顺序”时,指的是 (1,2,,N)(1,2,\dots,N) 的一个排列。

给定一个排列 P=(P1,P2,,PN)P=(P_{1},P_{2},\dots,P_{N})

我们将满足以下条件的排列 Q=(Q1,Q2,,QN)Q=(Q_{1},Q_{2},\dots,Q_{N}) 称为“好排列”:

  • 对于任意整数 1xN1\leq x\leq N,通过任意次执行 xQxx\leftarrow Q_{x} 这个替换操作,可以将 xx 变为 11

你可以对 PP 进行如下操作若干次(可以为 00 次),使其变为一个好排列:

  • 选择满足 1i<jN1\leq i<j\leq N 的整数 i,ji,j,交换 PiP_{i}PjP_{j}

设将 PP 变为好排列所需的最小操作次数为 MM,请你在对 PP 进行 MM 次操作后,输出所有可能得到的好排列中字典序最小的一个。

一个输入文件包含 TT 组测试数据,请分别求解。

数列的字典序定义如下:设 S=(S1,S2,,SS)S=(S_1,S_2,\ldots,S_{|S|})T=(T1,T2,,TT)T=(T_1,T_2,\ldots,T_{|T|})S,T|S|,|T| 分别表示 S,TS,T 的长度。SS 字典序小于 TT 当且仅当满足以下两条之一:

  1. S<T|S|<|T| 且 $(S\_1,S\_2,\ldots,S\_{|S|})=(T\_1,T\_2,\ldots,T\_{|S|})$。
  2. 存在整数 1imin{S,T}1\leq i\leq \min\lbrace |S|,|T| \rbrace,使得以下两点都成立:
    • $(S\_1,S\_2,\ldots,S\_{i-1})=(T\_1,T\_2,\ldots,T\_{i-1})$
    • SiS_i 小于 TiT_i(按数值比较)。

输入格式

输入从标准输入读入,格式如下:

TT case1\text{case}_{1} case2\text{case}_{2} \vdots caseT\text{case}_{T}

每组测试数据格式如下:

NN P1P_{1} P2P_{2} \cdots PNP_{N}

输出格式

请输出 TT 行,第 ii 行输出第 ii 组测试数据的答案,即字典序最小的好排列,数之间用空格分隔。

样例 1

输入

5
4
2 1 4 3
5
2 1 3 4 5
2
1 2
2
2 1
9
4 3 6 2 7 1 9 8 5

输出

2 3 4 1
2 3 4 5 1
2 1
2 1
4 3 5 2 7 1 8 9 6

说明/提示

数据范围

  • 1T1051\leq T\leq 10^{5}
  • 2N2×1052\leq N\leq 2\times 10^{5}
  • (P1,P2,,PN)(P_{1},P_{2},\dots,P_{N})(1,2,,N)(1,2,\dots,N) 的一个排列
  • 每个输入文件中所有 NN 的总和不超过 2×1052\times 10^{5}
  • 输入均为整数

样例解释 1

对于第 1 组测试数据,PP 不是好排列。将 P1P_{1}P3P_{3} 交换后,P=(4,1,2,3)P=(4,1,2,3),此时 PP 是好排列,M=1M=1。另外,将 P2P_{2}P4P_{4} 交换后,P=(2,3,4,1)P=(2,3,4,1),这是用 M=1M=1 次操作得到的好排列中字典序最小的,因此答案为该排列。

由 ChatGPT 4.1 翻译