鸡尾酒获得了一个数组,他定义数组的价值为每个相邻元素异或之和。例如数组
[3,5,9] 的价值为 (3^5) + (5^9) = 18 ,其中 ^ 为二进制中的异或运算。
现在他将数组向右进行 m 次向右循环移动,每次移动 b[i] 位,循环移动都建立在
上一次移动的基础上进行。现在他想考考你,每次循环移动过后,这个数组的价值为多少?
向右循环移动的定义:向右循环移动一位,数组中最右边的元素变成最左边的元素,其余元素全部向右移动一位。
例如数组 [1,2,3,4,5],向右循环移动两位的结果是 [4,5,1,2,3]。
输入第一行包含两个正整数 n 和 m,分别代表数组的长度和循环移动的次数。
接下来一行包含 n 个由空格隔开的正整数,分别表示数组中每个数字的长度。
接下来一行包含 m 个正整数,分别表示每次循环移动要移动的位数 b[i]。
样例说明:
初始时数组价值为 (1^2) + (2^3) + (3^4) + (4^5) = 12。
第一次移位之后,数组变为 [5,1,2,3,4] ,其价值为 (5^1) + (1^2) + (2^3) + (3^4)
= 15。
第二次移位之后,数组再次向右循环移动一次,数组变为 [4,5,1,2,3],价值为 9。
第三次移位之后,数组向右移动两次,变为 [2,3,4,5,1],价值为 13。
对于 20% 的数据,满足 n ≤ 1e5, m = 0。
对于另外 40% 的数据,满足 b[i] ≤ n ≤ 1e3, m ≤ 5。
对于 100% 的数据,满足 1 ≤ n, m, a[i], b[i] ≤ 1e5。