Problem:
Score : 300 points

Problem Statement

AtCoDeer the deer is going on a trip in a two-dimensional plane.
In his plan, he will depart from point (0, 0) at time 0, then for each i between 1 and N (inclusive), he will visit point (x_i,y_i) at time t_i.

If AtCoDeer is at point (x, y) at time t, he can be at one of the following points at time t+1: (x+1,y), (x-1,y), (x,y+1) and (x,y-1).
Note that he cannot stay at his place.
Determine whether he can carry out his plan.

Constraints

1 ≤ N ≤ 10^5

0 ≤ x_i ≤ 10^5

0 ≤ y_i ≤ 10^5

1 ≤ t_i ≤ 10^5

t_i < t_{i+1} (1 ≤ i ≤ N-1)

All input values are integers.

Input

Input is given from Standard Input in the following format:

N
t_1 x_1 y_1
t_2 x_2 y_2
:
t_N x_N y_N

Output

If AtCoDeer can carry out his plan, print Yes; if he cannot, print No.

Sample Input 1

2
3 1 2
6 1 1

Sample Output 1

Yes

For example, he can travel as follows: (0,0), (0,1), (1,1), (1,2), (1,1), (1,0), then (1,1).

Sample Input 2

1
2 100 100

Sample Output 2

No

It is impossible to be at (100,100) two seconds after being at (0,0).

Sample Input 3

2
5 1 1
100 1 1

Sample Output 3

No

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int judge(int now_x, int now_y, int t, int x, int y){
    int i, j;
    i = now_x;
    
    if(now_x < x){
    do{
        i++;
        t--;
        if(t < 0){
       
            return 2;
        
        }
    }while(i != x);
    }else if(now_x > x){
    do{
        i--;
        t--;
        if(t < 0){
      
            return 2;
       
        }
    }while(i != x);
    }
    
    j = now_y;
    
    if(now_y < y){
    do{
        j++;
        t--;
        if(t < 0){
      
            return 2;
        
        }     
    }while(j != y);
    }else if(now_y > y){
    do{
        j--;
        t--;
        if(t < 0){
       
            return 2;
        
        }     
    }while(j != y);
    }
   
    if(t == 0){
        return 1;
    }else if(t % 2 == 0){
        return 1;
    }else{
      
        return 2;
        
    }
}


int main(void){
    int N = 100000;
    int t[N], x[N], y[N];
    int i, j, n, k, x_num, y_num, time;
    scanf("%d", &n);
    for(i = 0; i < n; i++){
        scanf("%d%d%d", &t[i], &x[i], &y[i]);
    }
    x_num = 0;
    y_num = 0;
    time = t[0];
    for(i = 0; i < n; i++){
        if(i > 0){
        time = t[i] - t[i-1];
        }
       
        j = judge(x_num, y_num, time, x[i], y[i]);
      
        if(j == 1){
            x_num = x[i];
            y_num = y[i];
        }else{
            printf("No");
            exit(0);
        }
    }
    printf("Yes");
    return 0;
}