AT_arc165_f [ARC165F] Make Adjacent
Description
[problemUrl]: https://atcoder.jp/contests/arc165/tasks/arc165_f
長さ $ 2n $ の整数列 $ X=(X_1,X_2,\dots,X_{2n}) $ のうち、すべての $ i=1,2,\dots,n $ に対し $ X_{2i-1}=X_{2i} $ が成り立つものを **良い数列** と呼びます。
長さ $ 2N $ の整数列 $ A=(A_1,A_2,\dots,A_{2N}) $ があります。この整数列は各整数 $ i=1,2,\dots,N $ をちょうど $ 2 $ 個ずつ含みます。
$ A $ に対して「隣接する $ 2 $ 項の値を入れ替える」という操作を $ 0 $ 回以上行うことで、 $ A $ を **良い数列** にしたいです。
$ A $ を **良い数列** にするのに必要な最小の操作回数を $ K $ としたとき、 $ A $ に対し操作を $ K $ 回行うことで得られる **良い数列** のうち、辞書式順序で最小のものを求めてください。
数列の辞書順とは?数列 $ S\ =\ (S_1,S_2,\ldots,S_{|S|}) $ が数列 $ T\ =\ (T_1,T_2,\ldots,T_{|T|}) $ より**辞書順で小さい**とは、下記の 1. と 2. のどちらかが成り立つことを言います。 ここで、$ |S|,\ |T| $ はそれぞれ $ S,\ T $ の長さを表します。
1. $ |S|\ \lt\ |T| $ かつ $ (S_1,S_2,\ldots,S_{|S|})\ =\ (T_1,T_2,\ldots,T_{|S|}) $。
2. ある整数 $ 1\ \leq\ i\ \leq\ \min\lbrace\ |S|,\ |T|\ \rbrace $ が存在して、下記の $ 2 $ つがともに成り立つ。
- $ (S_1,S_2,\ldots,S_{i-1})\ =\ (T_1,T_2,\ldots,T_{i-1}) $
- $ S_i $ が $ T_i $ より(数として)小さい。
Input Format
入力は以下の形式で標準入力から与えられます。
> $ N $ $ A_1 $ $ A_2 $ $ \dots $ $ A_{2N} $
Output Format
$ A $ に対し操作を $ K $ 回行うことで得られる **良い数列** のうち、辞書式順序で最小のものを空白区切りで出力してください。
Explanation/Hint
### 制約
- $ 1\ \leq\ N\ \leq\ 2\ \times\ 10^5 $
- $ 1\ \leq\ A_i\ \leq\ N $
- 各整数 $ i=1,2,\dots,N $ は $ A $ にちょうど $ 2 $ 個ずつ含まれる
- 入力される値はすべて整数
### Sample Explanation 1
例えば $ (3,2,1,2,3,1)\ \rightarrow\ (3,2,1,3,2,1)\ \rightarrow\ (3,2,3,1,2,1)\ \rightarrow\ (3,3,2,1,2,1)\ \rightarrow\ (3,3,2,2,1,1) $ というように $ 4 $ 回の操作で $ A $ を \*\*良い数列\*\* にすることができ、これが最小の操作回数です。 $ 4 $ 回の操作では他に $ A=(2,2,3,3,1,1) $ とすることもできるので、答えは $ (2,2,3,3,1,1) $ となります。