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 Haskell (GHC 7.10.3) (judge verdict: Time Limit Exceeded)

import Data.Bits
import qualified Data.ByteString.Char8 as BS
import Control.Monad
import Data.Maybe

tuplify2 (x:y:_) = (x,y)
tuplify2 _ = undefined

--Input functions with ByteString
readInt = fst . fromJust . BS.readInteger
readIntTuple = tuplify2 . map readInt . BS.words
readIntList = map readInt . BS.words

getInt = readInt <$> BS.getLine
getIntList = readIntList <$> BS.getLine
getIntNList n = map readIntList <$> replicateM (fromIntegral n) BS.getLine
getIntMatrix = map readIntList . BS.lines <$> BS.getContents
getIntTuple = readIntTuple <$> BS.getLine
getIntNTuples n = map readIntTuple <$> replicateM (fromIntegral n) BS.getLine
getIntTuples = map readIntTuple . BS.lines <$> BS.getContents

main = do
  n <- getInt
  xs <- getIntList
  putStrLn . show $ solve' n xs

revBit60 :: Int -> Integer -> [Integer]
revBit60 k x = if k > 60 then [] else ((fromIntegral x) .&. 1):(revBit60 (k+1) (shiftR x 1))


revBitSum :: Integer -> [Integer] -> [Integer]
revBitSum x [] = []
revBitSum  x (y:ys) = (((fromIntegral x) .&. 1) + y):(revBitSum (shiftR x 1) ys)

solve' n xs =
  let eachBitSum = foldr revBitSum (replicate 60 0) xs
  in foldl (\s (i,x) -> (s + 2^i * x * (n-x)) `mod` (10^9 + 7) ) 0 $ zip [0..] eachBitSum


takeFirstSum xss = sum $ map head xss

solve n xs =
  let bitEx = map (revBit60 1) xs
      eachBitSum = calcEachBit bitEx
  in foldl (\s (i,x) -> (s + 2^i * x * (n-x)) `mod` (10^9 + 7) ) 0 $ zip [0..] eachBitSum

calcEachBit xss
  | head xss == [] = []
  | otherwise      = takeFirstSum xss : (calcEachBit (map tail xss))