import Control.Applicative ((<$>)) import Control.Monad (replicateM) import Data.List import Data.Char (isSpace) import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as B main :: IO () main = do n <- readLn solve n <$> replicateM n getIntegerList >>= print solve :: Int -> [[Integer]] -> Integer solve n = foldl' f 0 where m = 1000000007 f sn [c, d] = ((let c' = c `div` 2 in if even c then c' else c' + 1) * d + sn) `mod` m getIntegerList :: IO [Integer] getIntegerList = unfoldr f <$> B.getLine where f s = do (n, s') <- B.readInteger s return (n, B.dropWhile isSpace s')