import Control.Monad import Data.List checkMax :: (Integral a) => [a] -> [a] -> a checkMax cs ds = foldr ((+) . modm) 0 $ zipWith (*) cs ds modm a = a `mod` 1000000007 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 (modm . checkChair) c d = [last x | x <- cd] d' = map modm d print $ modm $ checkMax c' d'