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::vec::Vec;
use std::collections::HashSet;

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace().map(|e| e.parse().ok().unwrap()).collect()
}

fn main() {
    let (x, y) = {
        let v: Vec<usize> = read_vec();
        (v[0], v[1])
    };

    let mut group_1 = HashSet::new();
    for i in vec![1, 3, 5, 7, 8, 10, 12] {
        group_1.insert(i);
    }

    let mut group_2 = HashSet::new();
    for i in vec![4, 6, 9, 11] {
        group_2.insert(i);
    }

    let mut group_3 = HashSet::new();
    for i in vec![2] {
        group_3.insert(i);
    }

    if group_1.contains(&x) && group_1.contains(&y) {
       println!("Yes");
       return
    }

    if group_2.contains(&x) && group_2.contains(&y) {
       println!("Yes");
       return
    }

    if group_3.contains(&x) && group_3.contains(&y) {
       println!("Yes");
       return
    }

    println!("No");

}