import Control.Monad import Data.List checkMax :: (Integral a) => [a] -> [a] -> a checkMax cs ds = foldr ((+) . modm) 0 $ map modm $ zipWith (*) cs ds modm a = a `mod` (10^9 + 7) checkChair :: (Integral a) => a -> a checkChair c | even c == True = ce | odd c == True = co | otherwise = 0 where ce = div c 2 co = div c 2 + 1 main = do n <- readLn str <- replicateM n getLine let cd = map (map read . words) str :: [[Integer]] c = [head x | x <- cd] c' = map checkChair c d = [last x | x <- cd] print $ checkMax c' d