异或和
题号:NC309139
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小蓝有 n 个数 a_i,他想知道这 n 个数中的所有数对下标的差值乘上它们的异或之后,得到的结果的和是多少。

也就是说,小蓝想要得到

\sum_{i=1}^{n} \sum_{j=i+1}^{n} (a_i \oplus a_j) \times (j - i)

的值,其中 \oplus 表示按位异或。

输入描述:

输入的第一行包含一个正整数 n

第二行包含 n 个正整数 a_1, a_2, \cdots, a_n,相邻整数之间使用一个空格分隔。

对于所有评测用例,1 \leq n \leq 10^51 \leq a_i \leq 2^{20}

输出描述:

输出一行包含一个整数表示答案。
示例1

输入

复制
3
1 2 3

输出

复制
8
示例2

输入

复制
4
9 8 7 6

输出

复制
118