异或三元组

题目描述

Y 同学得到了一个长度为 NN 的正整数序列 A={a1,a2,,aN}A = \{a_1, a_2, \dots, a_N\}

他想知道,在这个序列中,有多少个三元组下标 (i,j,k)(i, j, k) 能够同时满足以下所有条件:

  1. 下标有序1i<j<kN1 \le i < j < k \le N
  2. 异或和为零aiajak=0a_i \oplus a_j \oplus a_k = 0
  3. 两两异或的位数限制
    • popcount(aiaj)2\text{popcount}(a_i \oplus a_j) \le 2
    • popcount(aiak)2\text{popcount}(a_i \oplus a_k) \le 2
    • popcount(akaj)2\text{popcount}(a_k \oplus a_j) \le 2

其中 \oplus 表示按位异或运算,popcount(x)\text{popcount}(x) 表示整数 xx 在二进制表示下 11 的个数。

请你计算满足上述条件的三元组数量,并将结果对 109+710^9 + 7 取模后输出。

输入格式

本题包含多组测试数据。

第一行输入一个整数 TT,表示测试数据的组数。

对于每组测试数据: 第一行输入一个正整数 NN,表示序列的长度。 第二行输入 NN 个正整数 a1,a2,,aNa_1, a_2, \dots, a_N,表示序列中的元素。

输出格式

对于每组测试数据,输出一行一个整数,表示满足条件的三元组数量对 109+710^9 + 7 取模后的结果。

样例

样例输入 #1

2
3
1 1 1
5
1 2 3 4 5

样例输出 #1

0
2

数据范围与约定

对于 100%100\% 的数据,保证:

  • 1T101 \le T \le 10
  • 1N3×1051 \le N \le 3 \times 10^5
  • 1ai21201 \le a_i \le 2^{120}
子任务编号 分值 NN \le aia_i \le 特殊性质
1 10 1010 2302^{30}
2 15 20002000
3 10410^4
4 5 10510^5 2602^{60} A
5 B
6 20
7 30 3×1053 \times 10^5 21202^{120}

特殊性质说明

  • A:对于任意 aia_i,满足 popcount(ai)=1\text{popcount}(a_i)=1
  • B:满足 ai230a_i \ge 2^{30} 且数据随机生成。

注意:本题中 aia_i 的范围较大,无法使用标准的 64 位整数存储。你需要使用 __int128 或其他高精度方式进行处理。使用 __int128 时需自行实现输入输出功能。

相关

在下列比赛中:

「果壳杯」 ROUND 34 (Div. 4)