小红的交错数组
题号:NC313697
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红有两个长为 n排列 ab,她想要将这两个排列交错合并为一个长度为 2 \times n 的数组。
\hspace{15pt}具体的,每次选择 ab 中最靠前的未被选取过的元素加入新的数组,直到两个排列中的所有元素都被选取。
\hspace{15pt}例如,a = \left[1,2 \right]b = \left[1, 2 \right] 时,\left[1, 1, 2, 2 \right]\left[1, 2, 1, 2 \right] 都是合法的结果,但 \left[2, 1, 1, 2 \right] 不是。
\hspace{15pt}小红想知道,总共能够交错生成多少种不同的数组?请按字典序从小到大输出所有不同的结果。

【名词解释】
\hspace{15pt}排列:长度为 n 的排列是由 1,2,\dots,n 这 n 个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\} 和 \{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(1 \leqq n \leqq 10 \right)
\hspace{15pt}第二行输入 n 个整数 a_i \left(1 \leqq a_i \leqq n \right) 代表排列 a
\hspace{15pt}第三行输入 n 个整数 b_i \left(1 \leqq b_i \leqq n \right) 代表排列 b

输出描述:

\hspace{15pt}第一行输出一个整数 x,代表能够生成数组的种类。
\hspace{15pt}之后的 x 行,每行输出一个长为 2\times n 的数组,代表字典序从小到大的所有不同结果。
示例1

输入

复制
2
1 2
1 2

输出

复制
2
1 1 2 2
1 2 1 2