{-# OPTIONS_GHC -O2 -funbox-strict-fields #-}
import qualified Data.ByteString.Char8 as BS
import           Data.Maybe            (fromJust)

main :: IO ()
main = do
  n <- readLn
  txys <- map readInt3 . BS.lines <$> BS.getContents
  putStrLn $ if solve n txys then "Yes" else "No"

solve :: Int -> [(Int, Int, Int)] -> Bool
solve _ txys = all travelable $ zip ((0, 0, 0):txys) txys

travelable :: ((Int, Int, Int), (Int, Int, Int)) -> Bool
travelable ((t, x, y), (t', x', y')) = dx + dy <= dt && even (dt - dx - dy) where
  dx = x' - x
  dy = y' - y
  dt = t' - t

readInt :: BS.ByteString -> Int
readInt = fst . fromJust . BS.readInt

readInt3 :: BS.ByteString -> (Int, Int, Int)
readInt3 = (\[a, b, c] -> (a, b, c)) . map readInt . BS.words
