#CCSP2019D. 摘水果

摘水果

时间限制: 1.0 秒

空间限制: 512 MB

题目背景

在我的后园,可以看见墙外有两株树。

——鲁迅,《野草》

题目描述

在我的后园,可以看见墙外有两株树,一株是苹果树,还有一株是梨树。收获的季节到了,两棵树上分别结了 nn 个果子;苹果树的果子用 1 到 nn 的整数编号,而梨树的果子用 n+1n+12n2n 的整数编号。我们为每个果子评出了美味度,编号为 ii 的果子美味度为 aia_i

对于编号为 ii 的果子,我们给出 bib_i,表示仅当 ii 号果子被摘下后,bib_i 号果子才能被摘下(如果 bi=0b_i=0,表示这个果子不产生限制)。如果某个果子被多条限制所影响,那么必须等到所有的条件都满足时才能被摘下;而没受到限制的果子总能被摘下。另外,我们对所有 ii 保证 bi<ib_i < i,并且要么 bib_i 果子与 ii 号果子在同一棵树上,要么 bi=0b_i=0。这样,我们总有办法按照某种顺序摘下两棵树上的所有果子,不会发生由于限制而无法摘下某些果子的情况。

现在我们要将这些果子包装并出售:每次,我们都从苹果树与梨树上分别摘下一个果子,然后将其作为一包出售,其价值是两个果子的美味度的按位异或的结果。这个过程会重复 nn 次,直到所有的果子都被摘完。每次,我们会按照以下标准选择摘取的果子:

  • 需要优先最大化两个果子作为一包时的价值;
  • 如果有多种方式使得价值最大,则要在此基础上最大化苹果的美味度;
  • 如果仍有平局,则要在此基础上最大化苹果的编号;
  • 如果仍有平局,则要在此基础上最大化梨的编号(此时不可能再出现平局了)。

你需要依次给出每一包果子的价值。

输入格式

从标准输入读入数据。

第一行输入一个正整数 nn

第二行依次输入 2n2n 个非负整数 a1,a2,,a2na_1, a_2, \dots, a_{2n}

第三行依次输入 2n2n 个非负整数 b1,b2,,b2nb_1, b_2, \dots, b_{2n}

同一行相邻的两个数之间用一个空格隔开。

输出格式

输出到标准输出。

输出一行,包含 nn 个数,依次表示每一包果子的价值。

同一行相邻的两个数之间用一个空格隔开。

3
3 9 4 1 3 4
0 0 2 0 4 4
7 13 2

样例 1 解释

仅有 3 号果子被摘下后,才能摘下 2 号果子;仅有 5 号果子与 6 号果子均被摘下后,才能摘下 4 号果子。

第 1 次,摘下了编号为 3、美味度为 4 的苹果与编号为 5、美味度为 3 的梨,得到了价值为 7(3 与 4 异或)的一包果子。注意,假设选取编号为 1 的苹果与编号为 6 的梨,虽然价值同样为 7,但由于苹果的美味度不如前述方案,所以不这样选择。

第 2 次,摘下了编号为 2、美味度为 9 的苹果与编号为 6、美味度为 4 的梨,得到了价值为 13(9 与 4 异或)的一包果子。

第 3 次,摘下了编号为 1、美味度为 3 的苹果与编号为 4、美味度为 1 的梨,得到了价值为 2(3 与 1异或)的一包果子。

子任务

所有数据保证 $n \leq 100,~0 \leq a_1, a_2, \dots, a_{2n} \leq 100$。

本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。

  • 子任务 1(31 分):对 in+1i \neq n+1ii 满足 bi=i1b_i=i-1,而 bn+1=0b_{n+1}=0,这意味着任意时刻任何一棵树只有一个可以摘的果子;
  • 子任务 2(47 分):对任意的 ii 满足 bi=0b_i=0,这意味着所有果子都没有受到任何的限制;
  • 子任务 3(22 分):无特殊限制。