P17091 三十四万一千七百九十九

题目背景

**请留意本题特殊的时间限制**。**请选手注意常数因子对程序运行效率带来的影响**。 --- 本故事纯属虚构,如有雷同,纯属巧合。 > 苏苏压根没加甲鱼的 QQ。数学课上,贝壳坐她前面,突然贼兮兮地转过头:“苏苏,甲鱼把 QQ 名改了。” > > “改成什么?” > > “我爱苏苏。” > > 苏苏脸一沉:“莫名其妙。” > > 话音刚落,数学老师猛地一回头——然而下一秒,他反而笑了:“甲鱼啊,想找另一半,好歹学学二次函数——人家有个对称轴,左右各一半。你这‘我爱苏苏’,连个对称性都没有,纯属单项式——单相思嘛。真要表白,用心形线才够浪漫。” > > 苏苏哭笑不得:“老师,您这是教数学还是教红娘?” > > 老师推了推眼镜:“曲线救国,懂不懂?直线球你又不接。再说了,这叫‘数中自有颜如玉’。” > > ![](https://cdn.luogu.com.cn/upload/image_hosting/s2l81omk.png)

题目描述

Sirus 拿到了一个长度为 $n$ 的非负整数序列 $a$。TA 需要将这 $n$ 个整数划分到两个可重集合 $S_1$ 和 $S_2$ 中。注意,$S_1$ 和 $S_2$ 可以为空集。 随后,TA 会把 $S_1,S_2$ 这两个集合丢给 Dylan。Dylan 在知道划分方案的前提下,会按照如下流程进行操作: - 准备一个初始为空的序列 $r$。 - 设初始时两个集合大小分别为 $s_1,s_2$。随后依次执行如下操作共 $\max(s_1,s_2)$ 轮: - 若 $S_1$ 非空,则在 $S_1$ 中任选一个元素作为 $x$ 并删去;否则取 $x=0$。 - 若 $S_2$ 非空,则在 $S_2$ 中任选一个元素作为 $y$ 并删去;否则取 $y=0$。 - 在数列 $r$ 的末尾加入 $x\oplus y$。 其中,$\oplus$ 表示按位异或运算。 现在,Sirus 和 Dylan 会按照如上规则玩两次游戏: - 对于第一次游戏,Sirus 和 Dylan 都希望最小化 $r$ 的字典序。 - 对于第二次游戏,Sirus 希望最大化 $r$ 的字典序,Dylan 希望最小化 $r$ 的字典序。 其中:对于两个序列 $a,b$,称 $a$ 的字典序小于 $b$,当且仅当存在最小的正整数 $p$ 满足 $a_p\ne b_p$,且有 $a_p

输入格式

**本题有多组测试数据**。 第一行一个正整数 $T$,表示测试数据组数。 对于每组测试数据: 第一行一个正整数 $n$。 第二行包含 $n$ 个非负整数 $a_i$。

输出格式

对于每组测试数据,输出一行两个非负整数,分别表示第一次游戏和第二次游戏过后 $$ \left(\sum_{i=1}^{|r|} (r_i+1)\times i\right) \pmod {10^9+7} $$ 的值。 两个整数之间用一个空格隔开。

说明/提示

#### 样例 $1$ 解释 考虑样例 $1$ 中的第一组测试数据 $a=[2,3,16,18]$。 在第一次游戏中,Sirus 会选择 $S_1=\{2,16\},S_2=\{3,18\}$ 的划分方式。 Dylan 会依次进行如下操作: - 选出 $x=2\in S_1,y=3\in S_2$,此时 $x\oplus y=1$。操作过后,$r=[1],S_1=\{16\},S_2=\{18\}$。 - 选出 $x=16\in S_1,y=18\in S_2$,此时 $x\oplus y=2$。操作过后,$r=[1,2],S_1=S_2=\emptyset$。 在第二次游戏中,Sirus 会选择 $S_1=\{2,3\},S_2=\{16,18\}$ 的划分方式。 Dylan 会依次进行如下操作: - 选出 $x=2\in S_1,y=18\in S_2$,此时 $x\oplus y=16$。操作过后,$r=[16],S_1=\{3\},S_2=\{16\}$。 - 选出 $x=3\in S_1,y=16\in S_2$,此时 $x\oplus y=19$。操作过后,$r=[16,19],S_1=S_2=\emptyset$。 对于第二组测试数据,在第一次游戏过后,$r=[0,1,18,30]$;在第二次游戏过后,$r=[16,28,1]$。 对于第三组测试数据,在第一次游戏过后,$r=[0,0,0,0,2,5,8]$;在第二次游戏过后,$r=[8,10,10,2,4,4,5]$。 对于第四组测试数据,在第一次游戏过后,$r=[0,0,0,0,0,3,5,7]$;在第二次游戏过后,$r=[8,8,9,10,4,4,5,7]$。 #### 数据范围 **本题采用捆绑测试**。 对于 $100\%$ 的数据,保证: - $1\le T,n\le 10^6$。 - $\sum n\le 10^6$。 - $0\le a_i\le 2^{30}-1$。 ::cute-table{tuack} | 子任务编号 | 分值 | $\sum n \le$ | $a_i \le$ | 特殊性质 | 时间限制 | | :----------: | :----: | :------------: | :----------: | :----------: | :-:| | $1$ | $10$ | $10$ | $100$ | 无 | $1000\text{ ms}$ | $2$ | $5$ | $2\times 10^3$ | $2^{30}-1$ | $\text{A}$ | $2000\text{ ms}$ | $3$ | $15$ | ^ | ^ | $\text{BC}$ |^| | $4$ | $35$ | ^ | ^ | $\text{C}$ |^ | | $5$ | $20$ | ^ | ^ | 无 |^| | $6$ | $15$ | $10^6$ | ^ | ^ |$5000\text{ ms}$| 特殊性质 $\text{A}$:保证所有 $a_i$ 均相同。 特殊性质 $\text{B}$:保证 $\min \{a_i\}\ge 2^{29}$。 特殊性质 $\text{C}$:保证 $\min \{a_i\}\ge 1$。 **特别地**,对于每一个子任务: - 若您能够对其中所有测试数据正确求出两次游戏的结果,则您可以获得该子任务 $100\%$ 的分数。 - 若您能够对其中所有测试数据正确求出第一次游戏的结果,而未能对其中所有测试数据正确求出第二次游戏的结果,则您可以获得该子任务 $60\%$ 的分数。 - 若您能够对其中所有测试数据正确求出第二次游戏的结果,而未能对其中所有测试数据正确求出第一次游戏的结果,则您可以获得该子任务 $45\%$ 的分数。 - 否则,您可以获得该子任务 $0\%$ 的分数。 最终,您的总分为各子任务的得分相加后向下取整的结果,您程序的用时为各个测试点运行用时的最大值。 **注意**,对于每组测试数据,即使您只打算回答其中一个游戏的结果,也仍需按照格式输出一行两个整数。