4196 - 数对异或和

题目描述

给定一个长度为 N 的整数序列 A_1, A_2, \dots, A_N(每个元素为非负整数)。

定义任意一对下标 (i,j)1 \le i < j \le N)的“按位异或值”为 A_i \oplus A_j(按位异或运算)。

请计算所有无序对的按位异或值之和: \sum_{1 \le i < j \le N} (A_i \oplus A_j)

并将结果对 10^9+7 取模后输出。

异或的含义:对两个整数按二进制逐位比较,相同位上不同则该位为 1,相同则为 0。例如 4 \oplus 1 = 5(在二进制下:100 \oplus 001 = 101)。

输入

第一行为整数 N

第二行给出 N 个非负整数,依次为 A_1, A_2, \dots, A_N,数值间用空格分隔。

输出

输出一行,一个整数,表示所求和对 10^9+7 取模后的结果。

样例

输入

3
1 2 3

输出

6

输入

10
3 1 4 1 5 9 2 6 5 3

输出

237

输入

10
3 14 159 2653 58979 323846 2643383 27950288 419716939 9375105820

输出

103715602
说明

样例 1 说明

以样例 1 为例:

序列为 [1,2,3],两两计算:

  • 1 \oplus 2 = 3
  • 1 \oplus 3 = 2
  • 2 \oplus 3 = 1

总和为:3 + 2 + 1 = 6

数据范围

数据范围

测试点编号N
1 \sim 22 \le N \le 300
3 \sim 42 \le N \le 3 \times 10^4
5 \sim 102 \le N \le 3 \times 10^5

对于 100\% 的数据,满足 2 \le N \le 3 \times 10^50 \le A_i \le 2^{60}

标签
题目参数
时间限制 1 秒
内存限制 512 MB
提交次数 0
通过人数 0
金币数量 4 枚
难度 基础


上一题 下一题