小红的双排列拆分
题号:NC296526
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小红拿到了一个长为 2\times n 的双排列。现在他想从中取两个不相交子序列,使两个子序列都是长度为 n 的排列,请你帮帮他。
\hspace{15pt}两个子序列是不相交的,当且仅当它们从原序列中取元素的位置没有重叠,即下标不同。

【名词解释】
\hspace{15pt}双排列:长度为 2\times n 的双排列为两个长度为 n 的排列打乱顺序后得到的数组。
\hspace{15pt}子序列:从原数组中删除任意个(可以为零、可以为全部)元素得到的新数组。
\hspace{15pt}排列:长度为 n 的排列是由 1,2,\dots,nn 个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\}\{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(1\leqq n \leqq 20\right)
\hspace{15pt}第二行输入 2 \times n 个整数 a_{1},a_{2},...,a_{2\times n}\left( 1 \leqq a_{i} \leqq n\right),表示双排列的元素。保证其是一个合法的双排列。

输出描述:

\hspace{15pt}第一行输出 n 个整数,代表第一个排列。
\hspace{15pt}第二行输出 n 个整数,代表第二个排列。

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
3
1 2 2 3 3 1

输出

复制
1 2 3
2 3 1