import Control.Applicative ((<$>)) import Control.Monad (replicateM) import Data.ByteString.Char8 (ByteString) import Data.Char (isSpace) import Data.List (unfoldr, foldl') import qualified Data.ByteString.Char8 as B myCeiling :: Integer -> Integer -> Integer myCeiling a b = ceiling $ fromIntegral a / fromIntegral b getIntList :: IO [Integer] getIntList = unfoldr f <$> B.getLine where f s = do (n, s') <- B.readInteger s return (n, B.dropWhile isSpace s') evalSittable :: [Integer] -> Integer evalSittable [c, d] = (myCeiling c 2) * d solve :: [[Integer]] -> Integer solve xss = (foldl' (\acc -> \xs -> acc + evalSittable xs) 0 xss) `mod` (10^9 + 7) main :: IO () main = do n <- readLn :: IO Int solve <$> replicateM n getIntList >>= print