#arc134d. [arc134_d]Concatenate Subsequences

[arc134_d]Concatenate Subsequences

問題文

長さ 2N2N の数列 aa が与えられます。

すぬけ君が (1,2,ldots,N)(1,2, \\ldots, N)空でない(連続するとは限らない)部分列 x=(x1,x2,ldots,xk)x=(x_1,x_2,\\ldots,x_k) を用いて、数列を作ろうとしています。 作られる数列は、aax1x_1 番目、x2x_2 番目、ldots\\ldotsxkx_k 番目、x1+Nx_{1}+N 番目、ldots\\ldotsxk+Nx_{k}+N 番目の要素を抜き出してこの順で連結した数列です。

すぬけ君が作ることができる数列のうち、辞書順最小のものを求めてください。

数列の辞書順とは?

相異なる数列 SS と数列 TT の大小を判定するアルゴリズムを以下に説明します。

以下では SSii 番目の要素を SiS_i のように表します。また、 SSTT より辞書順で小さい場合は SltTS \\lt T 、大きい場合は SgtTS \\gt T と表します。

  1. SSTT のうち長さが短い方の数列の長さを LL とします。i=1,2,dots,Li=1,2,\\dots,L に対して SiS_iTiT_i が一致するか調べます。
  2. SineqTiS_i \\neq T_i である ii が存在する場合、そのような ii のうち最小のものを jj とします。そして、SjS_jTjT_j を比較して、 SjS_jTjT_j より(数として)小さい場合は SltTS \\lt T 、大きい場合は SgtTS \\gt T と決定して、アルゴリズムを終了します。
  3. SineqTiS_i \\neq T_i である ii が存在しない場合、 SSTT の長さを比較して、SSTT より短い場合は SltTS \\lt T 、長い場合は SgtTS \\gt T と決定して、アルゴリズムを終了します。

制約

  • 与えられる入力は全て整数
  • 1leqNleq1051 \\leq N \\leq 10^5
  • 1leqaileq1091 \\leq a_i \\leq 10^9

入力

入力は以下の形式で標準入力から与えられる。

NN a1a_{1} cdots\\cdots a2Na_{2N}

出力

すぬけ君が作ることができる数列のうち、辞書順最小のものを出力せよ。


入力例 1

3
2 1 3 1 2 2

出力例 1

1 2
  • x=(2)x = (2) とします。
  • このとき、作られる数列は (1,2)(1,2) となり辞書順最小です。

入力例 2

10
38 38 80 62 62 67 38 78 74 52 53 77 59 83 74 63 80 61 68 55

出力例 2

38 38 38 52 53 77 80 55

入力例 3

12
52 73 49 63 55 74 35 68 22 22 74 50 71 60 52 62 65 54 70 59 65 54 60 52

出力例 3

22 22 50 65 54 52