{-# LANGUAGE BangPatterns #-} {-# LANGUAGE BinaryLiterals #-} {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE NumDecimals #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-} import Control.Applicative import Control.Arrow import Control.Monad import Control.Monad.ST import Data.Char import Data.List import Data.Maybe import qualified Data.ByteString.Char8 as B import Data.Array.ST.Safe import Data.STRef import Debug.Trace import Text.Printf readInt = readLn :: IO Int readInteger = readLn :: IO Integer readInts = map ( fst . fromJust . B.readInt ) . B.words <$> B.getLine readIntegers = map ( fst . fromJust . B.readInteger ) . B.words <$> B.getLine which a b f = if f then a else b mp [ a, b ] = ( a, b ) modifyArray a i f = writeArray a i =<< f <$> readArray a i printList [a] = print a printList (a:as) = putStr ( show a ) >> putChar ' ' >> printList as main = do [ n, m ] <- readInts [ ts, ps ] <- transpose <$> replicateM m readInts let illiegal = head ts == 0 && head ps /= 0 putStrLn $ which "Yes" "No" $ not illiegal && solve (0:ts) ( 0:ps) solve (t:ts) _ = True solve (t1:t2:ts) (p1:p2:ps) | abs ( p1 - p2 ) <= t2 - t1 = solve (t2:ts) (p2:ps) | otherwise = False