import java.util.*;
import java.util.stream.Collectors;

class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
      
        int n = sc.nextInt();
        ArrayList<Point> points = new ArrayList<>();
        for(int i = 0; i < n; i++) {
            points.add(new Point(sc.nextInt(), sc.nextInt(), sc.nextInt()));
        }
      
        Point beforePoint = new Point(0, 0, 0);
        boolean isFail = false;
        for (Point point : points) {
            int diffTime = point.getTime() - beforePoint.getTime();
            int diffX = point.getX() - beforePoint.getX();
            int diffY = point.getY() - beforePoint.getY();

            if (diffX + diffY > diffTime) {
                isFail = true;
                break;
            }

            if (diffTime % 2 == 0 && (diffX + diffY) % 2 != 0) {
                isFail = true;
                break;

            } else if (diffTime % 2 != 0 && (diffX + diffY) % 2 == 0) {
                isFail = true;
                break;

            }

            beforePoint = point;

        }
        if (isFail) {
            System.out.println("No");

        } else {
            System.out.println("Yes");

        }
    }
    public static class Point {
        private int time;
        private int x;
        private int y;

        public int getTime() {
            return time;
        }

        public int getX() {
            return x;
        }

        public int getY() {
            return y;
        }

        public Point(int time, int x, int y) {
            this.time = time;
            this.x = x;
            this.y = y;
        }
    }

}
/tmp/hf-datasets-cache/medium/datasets/42704881117311-config-parquet-and-info-qiankunmu-Project_CodeNet-896c9d36/hub/datasets--qiankunmu--Project_CodeNet_Python800_and_Java250/snapshots/c899fde44a77ba1cc14973ed3de064e4ff3aadc7/Project_CodeNet_Java250.tar.gz