Problem:
Score: 300 points

Problem Statement

We have a 3 \times 3 grid. A number c_{i, j} is written in the square (i, j), where (i, j) denotes the square at the i-th row from the top and the j-th column from the left.

According to Takahashi, there are six integers a_1, a_2, a_3, b_1, b_2, b_3 whose values are fixed, and the number written in the square (i, j) is equal to a_i + b_j.

Determine if he is correct.

Constraints

c_{i, j} \ (1 \leq i \leq 3, 1 \leq j \leq 3) is an integer between 0 and 100 (inclusive).

Input

Input is given from Standard Input in the following format:

c_{1,1} c_{1,2} c_{1,3}
c_{2,1} c_{2,2} c_{2,3}
c_{3,1} c_{3,2} c_{3,3}

Output

If Takahashi's statement is correct, print Yes; otherwise, print No.

Sample Input 1

1 0 1
2 1 2
1 0 1

Sample Output 1

Yes

Takahashi is correct, since there are possible sets of integers such as: a_1=0,a_2=1,a_3=0,b_1=1,b_2=0,b_3=1.

Sample Input 2

2 2 2
2 1 2
2 2 2

Sample Output 2

No

Takahashi is incorrect in this case.

Sample Input 3

0 8 8
0 8 8
0 8 8

Sample Output 3

Yes

Sample Input 4

1 8 6
2 9 7
0 7 7

Sample Output 4

No

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::io::prelude::*;

fn input<T>() -> T
where
    T: std::str::FromStr,
{
    let stdin = std::io::stdin();
    let token: String = stdin
        .lock()
        .bytes()
        .map(|c| c.unwrap() as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect();
    token.parse().ok().unwrap()
}

fn main() {
    let c: Vec<Vec<i64>> = (0..3).map(|_| (0..3).map(|_| input()).collect()).collect();

    let b1b2 = vec![c[0][0] - c[0][1], c[1][0] - c[1][1], c[2][0] - c[2][1]];
    let b2b3 = vec![c[0][1] - c[0][2], c[1][1] - c[1][2], c[2][1] - c[2][2]];
    let b3b1 = vec![c[0][2] - c[0][0], c[1][2] - c[1][0], c[2][2] - c[2][0]];
    let a1a2 = vec![c[0][0] - c[1][0], c[0][1] - c[1][1], c[0][2] - c[1][2]];
    let a2a3 = vec![c[1][0] - c[2][0], c[1][1] - c[2][1], c[1][2] - c[2][2]];
    let a3a1 = vec![c[2][0] - c[0][0], c[2][1] - c[0][1], c[2][2] - c[0][2]];

    let ok = if (b1b2[0] == b1b2[1] && b1b2[0] == b1b2[2])
        && (b2b3[0] == b2b3[1] && b2b3[0] == b2b3[2])
        && (b3b1[0] == b3b1[1] && b3b1[0] == b3b1[2])
        && (a1a2[0] == a1a2[1] && a1a2[0] == a1a2[2])
        && (a2a3[0] == a2a3[1] && a2a3[0] == a2a3[2])
        && (a3a1[0] == a3a1[1] && a3a1[0] == a3a1[2])
    {
        true
    } else {
        false
    };
    println!("{}", if ok { "Yes" } else { "No" });
}