{-# LANGUAGE BangPatterns #-} import Data.Bits import Data.List import Data.Maybe import Data.Int import Control.Monad maxInt :: Int64 maxInt = 4294967295 countOnes' :: Int64 -> Integer countOnes' !0 = 0 countOnes' !a = (fromIntegral (a .&. 1)) + (countOnes' (a `shiftR` 1)) getLog :: Int64 -> Int getLog !n = fromJust $ findIndex (> n) $ map (1 `shiftL`) [0..] countOnes :: Int64 -> Int64 -> Integer countOnes !a !b | a > b = 0 countOnes !a !b | a == b = countOnes' a countOnes !0 !n = range + leading + (countOnes 0 (n - (1 `shiftL` m))) where range = fromIntegral $ m * (1 `shiftL` (m - 1)) leading = fromIntegral $ (n - (1 `shiftL` m) + 1) m = (getLog n) - 1 countOnes !a !b | a > 0 = (countOnes 0 b) - (countOnes 0 (a - 1)) countOnes !a !0 | a < 0 = countOnes (maxInt + a + 1) maxInt countOnes !a !b | b < 0 = (countOnes a 0) - (countOnes (b + 1) 0) countOnes !a !b | a < 0 = (countOnes a 0) + (countOnes 0 b) splitBy :: Char -> String -> [String] splitBy _ [] = [] splitBy c s = first : splitBy c (dropWhile (== c) rest) where (first, rest) = break (== c) s readLineInt :: IO Int readLineInt = getLine >>= return . read readLineInts :: IO [Int64] readLineInts = getLine >>= return . map read . (splitBy ' ') main :: IO () main = do n <- readLineInt doIt n doIt :: Int -> IO () doIt !0 = return () doIt !n = do l <- readLineInts putStrLn $ show $ countOnes (head l) (head $ tail l) doIt (n - 1)