假设序列是a1,a2,a3,a4.
1.考虑f1 到f2 , 多了一个a2,a3,a4的后缀异或和,少了一个a4 这个后缀的异或和
2.f2到f3 , 多了一个a3,a4的后缀异或和,少了一个a3,a4 这个后缀的异或和
3.总结规律:从fi 到 fi+1 每次会因为子数组增长而多一个后缀(从每个子数组提取最后一个),但是同时也会丢失最后一个区间异或和(比如f2的时候有a3,a4,但是到f3时,这个子数组由于无法往后拓展而失去)
fk表示长度为k的全部子数组元素按位异或的结果。例如:对于原数组{1,2,3,4},长度为3 的子数组有{1,2,3}和{2,3,4},因此f3=(1⊕2⊕3)⊕(2⊕3⊕4)。同理f2=(1⊕2)⊕(2⊕3)⊕(3⊕4)。
现在,对于给定的一个长度为n的数组{a1,a2,...,an}。输出f1~ fn。
a⊕b表示a按位异或b(按位异或运算符"⊕”是双目运算符。其功能是参与运算的两数各对应的二进位相异或。只要对应的两个二进位不相同时,结果位就为1)。
第一行输入一个整数n(1≤n≤2×105)代表数组中的元素数量。
第二行输入n个整数a1,a2,...,an(0≤ai<230)代表数组元素,
在一行上输出n个整数,分别表示f1~fn。
输入
3
1 1 1
输出
1 0 1