#P16470. 低位协同

低位协同

题目描述

某计算中心中有 nn 台终端,第 ii 台终端拥有一个互不相同的非负整数标识 wiw_i

系统需要将当前在线的终端进行分组。大多数终端会两两组成一组;若在线终端数量为奇数,则最后剩下的一台终端单独成组。

设当前尚未分组的终端标识构成集合 SS。对于两个标识 a,ba,b,定义它们的协同度

k=1[amod2k=bmod2k],\sum_{k=1}^{\infty}[a\bmod 2^k=b\bmod 2^k],

其中 [P][P] 在命题 PP 成立时取 11,否则取 00。两个终端组成一组时,该组的贡献值为

(ab)1.(a\oplus b)-1.

系统不断执行以下操作,直到 SS 为空:

  • S={a}S=\{a\},则将该终端单独成组,这一组的贡献值为 aa
  • S2|S|\ge 2,则从中选择一对协同度最大的标识 a,ba,b,将对应终端组成一组,并从 SS 中删除它们。若有多对终端的协同度同时达到最大值,任意选择其中一对都不会影响最终结果。

一次分组任务的总校验值,定义为所有小组贡献值的按位异或和。

任务开始前,恰好会有一台终端离线。对于每一种可能离线的终端,请分别求出其余 n1n-1 台终端完成分组后的总校验值。

输入格式

第一行包含一个整数 nn,表示终端数量。

第二行包含 nn 个互不相同的非负整数 w1,w2,,wnw_1,w_2,\ldots,w_n,表示各终端的标识。

输出格式

输出一行,共包含 nn 个整数。第 ii 个整数表示第 ii 台终端离线后,其余终端分组得到的总校验值。

样例

样例输入 1

1
147744151

样例输出 1

0

样例输入 2

2
120712 120412

样例输出 2

120412 120712

样例输入 3

6
0 2 5 7 8 10

样例输出 3

14 12 7 5 6 4

样例解释 3

若第 11 台终端离线,则系统按照如下方式分组:

S={2,5,7,8,10}S=\{2,5,7,8,10\},其中标识 2,102,10 的协同度为 33,达到当前最大值,该组贡献为 (210)1=7(2\oplus 10)-1=7

S={5,7,8}S=\{5,7,8\},其中标识 5,75,7 的协同度为 11,达到当前最大值,该组贡献为 (57)1=1(5\oplus 7)-1=1

S={8}S=\{8\},该终端单独成组,贡献值为 88

最终总校验值为 718=147\oplus 1\oplus 8=14

若第 22 台终端离线,则分组为 {0,8},{5,7},{10}\{0,8\},\{5,7\},\{10\},总校验值为 ((08)1)((57)1)10=12((0\oplus 8)-1)\oplus ((5\oplus 7)-1)\oplus 10=12

数据范围与提示

对于测试点 1 \sim 3 满足:n700n\leq 700

对于测试点 4 \sim 5 满足:nn22 的次幂,wi=i1w_i=i-1

对于测试点 6 \sim 7 满足:n=21550, wi<215n=2^{15}-50,\ w_i<2^{15}

对于所有测试点满足:1n5×105, 0wi10181\leq n\leq 5\times 10^5,\ 0\leq w_i\leq 10^{18},且所有 wiw_i 互不相同。