Problem:
Score : 100 points

Problem Statement

Based on some criterion, Snuke divided the integers from 1 through 12 into three groups as shown in the figure below.
Given two integers x and y (1 ≤ x < y ≤ 12), determine whether they belong to the same group.

Constraints

x and y are integers.

1 ≤ x < y ≤ 12

Input

Input is given from Standard Input in the following format:

x y

Output

If x and y belong to the same group, print Yes; otherwise, print No.

Sample Input 1

1 3

Sample Output 1

Yes

Sample Input 2

2 4

Sample Output 2

No

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

use std::env;
use std::io::*;
use std::str::*;

fn read<T: FromStr>() -> T {
    let stdin = stdin();
    let s = stdin.bytes().map(|c| c.unwrap() as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect::<String>();
    s.parse::<T>().ok().unwrap()
}

fn main() {
    // main の引数
    /*
        引数なしのときargs.len() = 1;
    */
    let args: Vec<String> = env::args().collect();

    let G1 = vec![1,3,5,7,8,10,12];
    let G2 = vec![4,6,9,11];
    let G3 = vec![2];


    let x = read::<i32>();
    let y = read::<i32>();
    let mut boolean = false;
    match (G1.iter().find(|&&f| f == x), G1.iter().find(|&&f| f == y)) {
        (Some(x), Some(y)) => boolean = true,
        _ => {},
    }
    match (G2.iter().find(|&&f| f == x), G2.iter().find(|&&f| f == y)) {
        (Some(x), Some(y)) => boolean = true,
        _ => {},
    }
    match (G3.iter().find(|&&f| f == x), G3.iter().find(|&&f| f == y)) {
        (Some(x), Some(y)) => boolean = true,
        _ => {},
    }
    if boolean {
        println!("Yes");
    }else {
        println!("No");
    }
}