Problem:
Score : 400 points

Problem Statement

We have N integers. The i-th integer is A_i.

Find \sum_{i=1}^{N-1}\sum_{j=i+1}^{N} (A_i \mbox{ XOR } A_j), modulo (10^9+7).

What is \mbox{ XOR }?

The XOR of integers A and B, A \mbox{ XOR } B, is defined as follows:

When A \mbox{ XOR } B is written in base two, the digit in the 2^k's place (k \geq 0) is 1 if either A or B, but not both, has 1 in the 2^k's place, and 0 otherwise.

For example, 3 \mbox{ XOR } 5 = 6. (In base two: 011 \mbox{ XOR } 101 = 110.)

Constraints

2 \leq N \leq 3 \times 10^5

0 \leq A_i < 2^{60}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the value \sum_{i=1}^{N-1}\sum_{j=i+1}^{N} (A_i \mbox{ XOR } A_j), modulo (10^9+7).

Sample Input 1

3
1 2 3

Sample Output 1

6

We have (1\mbox{ XOR } 2)+(1\mbox{ XOR } 3)+(2\mbox{ XOR } 3)=3+2+1=6.

Sample Input 2

10
3 1 4 1 5 9 2 6 5 3

Sample Output 2

237

Sample Input 3

10
3 14 159 2653 58979 323846 2643383 27950288 419716939 9375105820

Sample Output 3

103715602

Print the sum modulo (10^9+7).

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>

using namespace std;
#include <string>
typedef long long int ll;
#include <algorithm>
#include <stack>
#include <vector>
#include <array>
#include <queue>
#include <bitset>
#include <math.h>
int main(){

  ll N;
  cin >> N;
  vector<ll> A(N);
  for(ll i=0;i<N;i++){
    ll a; cin >> a;
    A[i] = a;
  }

  ll max_ = *std::max_element(A.begin(),A.end());
  ll max__ = max_;
  ll keta = 1;
  while(max_>=2){
    max_ /= 2;
    keta += 1;
  }

  vector<ll> zero(keta);
  vector<ll> one(keta);


  for(ll i=0;i<N;i++){
    ll a_i = A[i];
    for(ll k=keta-1;k>=0;k--){
      ll w = a_i/pow(2,k);
      //cout <<w;
      if(w==0){
        zero[k] += 1;
      }else{
        one[k] += 1;
      }
      a_i -= w*pow(2,k);
    }
  }
  //printf("keta=%d,zero.size()=%d,one.size()=%d\n",keta,zero.size(),one.size() );
  //for(ll i:zero){
    //cout << i<<endl;
  //}
  //cout << endl;

  ll sum_ = 0;
  for(ll i=0;i<keta;i++){
    sum_ += pow(2,i)*zero[i]*one[i];
    sum_ = sum_%1000000007;
  }
  cout << sum_<<endl;
  return 0;

}