排列组合之王
题号:NC219178
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

        根据peko预言书说明,沉睡了数千年的魔王要复活了,为了能够应对魔王的随时复活,人类国度每年都会挑选出各色各样的有才能的人作为勇者,如超魔王级的侦探,超魔王级的大胃王等等,而你!正是超魔王级的排列组合之王。为了配合你的能力,国王给了你N个随从去任意使用,你可以从里面挑选任意个不同的随从组成小队,小队的战力等于所有随从战力值的异或和(异或是指把数字转成二进制后,同位上的数字相同则异或后该位为0,不相同则异或后该位为1,如1^2=3,  3^2=1,  7^9=14),假设你选择了4个随从,分别战力为1,2,2,4,则组成的小队战力=1^2^2^4=5。寻找最大的战力队伍对你来说实在是太简单了不值一提,你现在想要知道你用这些随从可以组成的所有不同种类的队伍的战力和,(两个队伍被视为不同代表两队里面的人数不同或者至少存在一个随从不一样)

输入描述:

第一行输入一个N(1<=N<=200000);
第二行输入N个整数,第 i 个整数代表第 i 个随从的战力,0<=随从的战力<2000000;

输出描述:

输出一个整数,代表所有不同种类的队伍的战力和,输出结果可能很大,请输出对1000000007取模后的值
示例1

输入

复制
3
1 2 3

输出

复制
12

说明

你可以选择的随从的集合为{1}=1,{2}=2  , {3}=3,{1,2}=3,    {2,3}=1,    {1,3}=2,   {1,2,3}=0,总和为12.