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 OCaml (4.02.3) (judge verdict: Accepted)

let () =
    let main () =
        let n = Scanf.scanf "%d" (fun n -> n) in
        let m = 1000000000 + 7 in
        let ( +@) a b = (a + b) mod m in
        let ( *@) a b = ((a mod m) * (b mod m)) mod m in
        let a = Array.init n (fun _ -> Scanf.scanf " %d" (fun a -> a)) in
        let rec loop i acc =
            if i = 60 then acc else
                let d0, d1 = Array.fold_left (fun (acc1, acc2) v ->
                    if v land (1 lsl i) = 0 then acc1 + 1, acc2 else acc1, acc2 + 1) (0, 0) a
                in
                loop (i + 1) (acc +@ d0 *@ d1 *@ (1 lsl i))
        in
        Printf.printf "%d\n" (loop 0 0)
    in
    main ()