给定一个由数字 $(1, 2, \dots, N)$ 组成的列表 $X$,一个递增子序列是这些数字中按递增顺序排列的子集,而一个递减子序列是这些数字中按递减顺序排列的子集。例如,$(5, 7, 8)$ 是 $(4, 5, 3, 7, 6, 2, 8, 1)$ 的一个递增子序列。
大约 80 年前,两位数学家 Paul Erdős 和 George Szekeres 证明了一个著名的结论:$X$ 必然存在一个长度至少为 $\sqrt{N}$ 的递增子序列,或者一个长度至少为 $\sqrt{N}$ 的递减子序列。例如,$(4, 5, 3, 7, 6, 2, 8, 1)$ 包含一个长度为 4 的递减子序列:$(5, 3, 2, 1)$。
我正在教授一门组合数学课,我想通过示例向学生“证明”这个定理。对于序列中的每个数字 $X[i]$,我将计算两个值:
- $A[i]$:以 $X[i]$ 为最大值的 $X$ 的最长递增子序列的长度。
- $B[i]$:以 $X[i]$ 为最大值的 $X$ 的最长递减子序列的长度。
我证明的关键在于,对于每个 $i$,数对 $(A[i], B[i])$ 都是唯一的,这意味着对于某个 $i$,必然有 $A[i]$ 或 $B[i]$ 至少为 $\sqrt{N}$。对于上述序列,所有的 $A[i]$ 和 $B[i]$ 值如下:
| $i$ | $X[i]$ | $A[i]$ | $B[i]$ |
|---|---|---|---|
| 0 | 4 | 1 | 4 |
| 1 | 5 | 2 | 4 |
| 2 | 3 | 1 | 3 |
| 3 | 7 | 3 | 4 |
| 4 | 6 | 3 | 3 |
| 5 | 2 | 1 | 2 |
| 6 | 8 | 4 | 2 |
| 7 | 1 | 1 | 1 |
我想出了一个非常有趣的序列来演示这个事实,并计算了每个 $i$ 的 $A[i]$ 和 $B[i]$,但我忘记了原始序列是什么。给定 $A[i]$ 和 $B[i]$,你能帮我重构 $X$ 吗?
$X$ 应该由数字 $(1, 2, \dots, N)$ 以某种顺序组成。如果存在多个可能的序列,你应该选择字典序最小的那一个。这意味着 $X[0]$ 应该尽可能小,如果仍然有多个解,则 $X[1]$ 应该尽可能小,依此类推。
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例,每个测试用例包含三行。
每个测试用例的第一行包含一个整数 $N$。第二行包含 $N$ 个用空格分隔的正整数,表示 $A[0], A[1], \dots, A[N-1]$。第三行包含 $N$ 个用空格分隔的正整数,表示 $B[0], B[1], \dots, B[N-1]$。
输出格式
对于每个测试用例,输出一行 "Case #x: ",后跟按顺序排列的 $X[0], X[1], \dots, X[N-1]$,并用空格分隔。
数据范围
$1 \le T \le 30$。 保证至少存在一个可能的 $X$ 解。
小数据集(测试集 1 - 可见;9 分)
$1 \le N \le 20$。
大数据集(测试集 2 - 隐藏;15 分)
$1 \le N \le 2000$。
样例
输入格式 1
2 1 1 1 8 1 2 1 3 3 1 4 1 4 4 3 4 3 2 2 1
输出格式 1
Case #1: 1 Case #2: 4 5 3 7 6 2 8 1