import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());

        int[][] tn = new int[N][3];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        }

        int x = 0;
        int y = 0;
        int current = 0;
        boolean isRearch = false;
        for (int i = 0; i < N; i++) {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        }

        System.out.println(isRearch ? "Yes" : "No");
    }

} import java.util.Scanner; Scanner java.util public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());

        int[][] tn = new int[N][3];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        }

        int x = 0;
        int y = 0;
        int current = 0;
        boolean isRearch = false;
        for (int i = 0; i < N; i++) {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        }

        System.out.println(isRearch ? "Yes" : "No");
    }

} Main public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());

        int[][] tn = new int[N][3];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        }

        int x = 0;
        int y = 0;
        int current = 0;
        boolean isRearch = false;
        for (int i = 0; i < N; i++) {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        }

        System.out.println(isRearch ? "Yes" : "No");
    } main {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());

        int[][] tn = new int[N][3];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        }

        int x = 0;
        int y = 0;
        int current = 0;
        boolean isRearch = false;
        for (int i = 0; i < N; i++) {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        }

        System.out.println(isRearch ? "Yes" : "No");
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int N = Integer.parseInt(sc.nextLine()); N Integer.parseInt(sc.nextLine()) Integer.parseInt Integer sc.nextLine() sc.nextLine sc int[][] tn = new int[N][3]; tn new int[N][3] N 3 for (int i = 0; i < N; i++) {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        } {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        } for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            } int j = 0; int j = 0; j 0 j < 3 j 3 j++ j++ j {
                tn[i][j] = Integer.parseInt(sc.next());
            } {
                tn[i][j] = Integer.parseInt(sc.next());
            } tn[i][j] = Integer.parseInt(sc.next()) tn[i][j] tn[i] tn i j Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int x = 0; x 0 int y = 0; y 0 int current = 0; current 0 boolean isRearch = false; isRearch false for (int i = 0; i < N; i++) {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        } {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        } int dx = Math.abs(tn[i][1] - x); dx Math.abs(tn[i][1] - x) Math.abs Math tn[i][1] - x tn[i][1] tn[i] tn i 1 x int dy = Math.abs(tn[i][2] - y); dy Math.abs(tn[i][2] - y) Math.abs Math tn[i][2] - y tn[i][2] tn[i] tn i 2 y int act = tn[i][0] - current; act tn[i][0] - current tn[i][0] tn[i] tn i 0 current if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            } !(act == dx + dy) (act == dx + dy) act dx + dy dx dy {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            } if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                } act % 2 == 0 act % 2 act 2 0 {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    } dx + dy != 0 dx + dy dx dy 0 {
                        isRearch = false;
                        break;
                    } isRearch = false isRearch false break; if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                } act % 2 == 1 act % 2 act 2 1 {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    } dx + dy != 1 dx + dy dx dy 1 {
                        isRearch = false;
                        break;
                    } isRearch = false isRearch false break; {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                } isRearch = false isRearch false break; x = tn[i][1] x tn[i][1] tn[i] tn i 1 y = tn[i][2] y tn[i][2] tn[i] tn i 2 current = tn[i][0] current tn[i][0] tn[i] tn i 0 isRearch = true isRearch true System.out.println(isRearch ? "Yes" : "No") System.out.println System.out System System.out isRearch ? "Yes" : "No" isRearch "Yes" "No" String[] args args public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());

        int[][] tn = new int[N][3];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        }

        int x = 0;
        int y = 0;
        int current = 0;
        boolean isRearch = false;
        for (int i = 0; i < N; i++) {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        }

        System.out.println(isRearch ? "Yes" : "No");
    }

} public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());

        int[][] tn = new int[N][3];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        }

        int x = 0;
        int y = 0;
        int current = 0;
        boolean isRearch = false;
        for (int i = 0; i < N; i++) {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        }

        System.out.println(isRearch ? "Yes" : "No");
    }

} Main
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());

        int[][] tn = new int[N][3];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < 3; j++) {
                tn[i][j] = Integer.parseInt(sc.next());
            }

        }

        int x = 0;
        int y = 0;
        int current = 0;
        boolean isRearch = false;
        for (int i = 0; i < N; i++) {
            int dx = Math.abs(tn[i][1] - x);
            int dy = Math.abs(tn[i][2] - y);
            int act = tn[i][0] - current;

            // 距離が行動数未満かどうか
            if (!(act == dx + dy)) {
                if (act % 2 == 0) {
                    // 偶数の場合、差は0だったら到達できる
                    if (dx + dy != 0) {
                        isRearch = false;
                        break;
                    }

                } else if (act % 2 == 1) {
                    // 奇数の場合、差が1だったら到達的できる
                    if (dx + dy != 1) {
                        isRearch = false;
                        break;
                    }
                } else {

                    // 偶数・奇数で条件を満たさないので到達できない
                    isRearch = false;
                    break;
                }
            }

            x = tn[i][1];
            y = tn[i][2];
            current = tn[i][0];
            isRearch = true;
        }

        System.out.println(isRearch ? "Yes" : "No");
    }

}
