F - OR or XOR
Earlgray
2
s
1024
MB
500
点
問題文
長さ $N$ の数列 $A_1,A_2,...,A_N$ があります。この数列に対し、次の操作を行います。
- まず、変数 $x$ を持ちます。これは最初 $0$ です。また、変数 $i$ を持ちます。これは最初 $1$ です。
- $x$ を、「 $x$ と $A_i$ のbitごとの論理和」もしくは「 $x$ と $A_i$ のbitごとの排他的論理和」で置き換えます。
- もし、 $i=N$ なら操作を終了します。そうでなければ $i$ に $1$ を足し、操作2に戻ります。
ここで、 $N$ 回の操作 2 でそれぞれ $x$ をどちらで置き換えるかによって、異なる操作を $2^N$ 通り考えることができます。この全てに対する最終的な $x$ の総和を $10^9+7$ で割った余りを出力してください。
制約
・入力は全て整数
・$1\leq N\leq 2×10^5$
・$0\leq A_i\leq 10^{18}\ (1\leq i\leq N)$
入力
入力は以下の形式で与えられます。
$N$
$A_1\ A_2\ ...\ A_N$
出力
全ての異なる操作の方法に対する、最終的な $x$ の値の総和を $10^9+7$ で割った余りを 1 行に出力してください。
入力例 1
3
1 2 3
出力例 1
12
$x$ は、 $4$ 通りの操作において $(1,3,0)$ と変化し、 $4$ 通りの操作において $(1,3,3)$ と変化します。そのため、このケースでの答えは
$0×4+3×4=12$ となります。どちらの操作を行っても $x$ が同じ数で置き換えられる場合でも、2つの操作を区別することに気をつけてください。
入力例 2
2
998244353 31415926535
出力例 2
995738273
$10^9+7$ で割った余りを出力してください。