Weird Array

Time limit: 0.3s Memory limit: 256MB Input: Output:

"Weird doesn't really exist, not because there isn't anything weird out there, but because everything is weird."

Cerință

Fie aa un vector cu NN elemente. Pentru o subsecvență^{\dag} a[i,...,j]a[i,...,j] cu 0ijN10 \leq i \leq j \leq N-1 considerăm toate subșirurile nevide al acesteia, iar pentru fiecare calculăm xor-ul elementelor sale. Însumând toate aceste valori (modulo 109+710^9+7), obținem puterea subsecvenței. Definimn valoarea vectorului aa ca fiind suma puterilor tuturor subsecvențelor sale (modulo 109+710^9+7).

Date de intrare

Pe prima linie se va găsi NN, iar pe a doua linie se vor găsi elementele a0,a1,...,aN1a_{0}, a_{1}, ... , a_{N-1}.

Date de ieșire

Pe prima linie se va afișa suma valorilor tuturor subsecvențelor vectorului aa, modulo 109+710^9+7.

Restricții și precizări

  • 1N21051 \leq N \leq 2 \cdot 10^5;
  • 0ai1090 \leq a_{i} \leq 10^9 pentru orice 0iN10 \leq i \leq N-1.
  • ^{\dag} Prin subsecvență a unui șir se înțelege o succesiune de elemente aflate pe poziții consecutive în șirul inițial. De exemplu, pentru șirul [1,2,3,6,12][1, 2, 3, 6, 12], [1,2][1, 2] este o subsecvență, [2,3,6][2, 3, 6] este o subsecvență, dar [2,6,12][2, 6, 12] nu este.
  • Pentru teste în valoare de 1010 puncte, N10N \leq 10.
  • Pentru teste în valoare de alte 4040 de puncte N5000N \leq 5000.
  • Pentru teste în valoare de alte 1010 de puncte, avem că a0=a1=...=aN1a_{0} = a_{1} = ... = a_{N-1}.

Exemplul 1

stdin

3
2 3 1

stdout

30

Explicație

Puterea subsecvenței [0,0][0,0] este 2=22 = 2,
Puterea subsecvenței [1,1][1,1] este 3=33 = 3,
Puterea subsecvenței [2,2][2,2] este 1=11 = 1,
Puterea subsecvenței [0,1][0,1] este 2+3+(23)=62 + 3 + (2 \oplus 3) = 6,
Puterea subsecvenței [1,2][1,2] este 3+1+(31)=63 + 1 + (3 \oplus 1) = 6,
Puterea subsecvenței [0,2][0,2] este 2+3+1+(23)+(31)+(21)+(231)=122 + 3 + 1 + (2 \oplus 3) + (3 \oplus 1) + (2 \oplus 1) + (2 \oplus 3 \oplus 1) = 12,
Valoarea șirului dat este astfel: 2+3+1+6+6+12=302+3+1+6+6+12 = 30.

Log in or sign up to be able to send submissions!