Problem:
Score: 100 points

Problem Statement

E869120's and square1001's 16-th birthday is coming soon.

Takahashi from AtCoder Kingdom gave them a round cake cut into 16 equal fan-shaped pieces.

E869120 and square1001 were just about to eat A and B of those pieces, respectively,

when they found a note attached to the cake saying that "the same person should not take two adjacent pieces of cake".

Can both of them obey the instruction in the note and take desired numbers of pieces of cake?

Constraints

A and B are integers between 1 and 16 (inclusive).

A+B is at most 16.

Input

Input is given from Standard Input in the following format:

A B

Output

If both E869120 and square1001 can obey the instruction in the note and take desired numbers of pieces of cake, print Yay!; otherwise, print :(.

Sample Input 1

5 4

Sample Output 1

Yay!

Both of them can take desired number of pieces as follows:

Sample Input 2

8 8

Sample Output 2

Yay!

Both of them can take desired number of pieces as follows:

Sample Input 3

11 4

Sample Output 3

:(

In this case, there is no way for them to take desired number of pieces, unfortunately.

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

macro_rules! input {
    (source = $s:expr, $($r:tt)*) => {
        let mut iter = $s.split_whitespace();
        let mut next = || { iter.next().unwrap() };
        input_inner!{next, $($r)*}
    };
    ($($r:tt)*) => {
        let stdin = std::io::stdin();
        let mut bytes = std::io::Read::bytes(std::io::BufReader::new(stdin.lock()));
        let mut next = move || -> String{
            bytes
                .by_ref()
                .map(|r|r.unwrap() as char)
                .skip_while(|c|c.is_whitespace())
                .take_while(|c|!c.is_whitespace())
                .collect()
        };
        input_inner!{next, $($r)*}
    };
}
 
macro_rules! input_inner {
    ($next:expr) => {};
    ($next:expr, ) => {};
 
    ($next:expr, $var:ident : $t:tt $($r:tt)*) => {
        let $var = read_value!($next, $t);
        input_inner!{$next $($r)*}
    };
}
 
macro_rules! read_value {
    ($next:expr, ( $($t:tt),* )) => {
        ( $(read_value!($next, $t)),* )
    };
 
    ($next:expr, [ $t:tt ; $len:expr ]) => {
        (0..$len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()
    };
 
    ($next:expr, chars) => {
        read_value!($next, String).chars().collect::<Vec<char>>()
    };
 
    ($next:expr, usize1) => {
        read_value!($next, usize) - 1
    };
 
    ($next:expr, $t:ty) => {
        $next().parse::<$t>().expect("Parse error")
    };
}

fn main() {
/*ABC109_A
    let ab=read_a();
    let a:i64=ab[0];
    let b:i64=ab[1];
    let mut j=false;
    for c in 1..4{
        if a*b*(c as i64)%2==1{j=true;}
    }
    if j{println!("Yes")} else {println!("No")};
*/

//use std::collections::BTreeSet;
/*ABC109_B
    let n=read_n();
    let mut w:Vec<Vec<char>>=vec!();
    for _ in 0..n{w.push(read_s())};
    //println!("{},{:?}", n,w);
    let mut j=true;
    if w.iter().collect::<BTreeSet<_>>().len() !=n{j=false};
    for i in 0..n-1{
        if w[i][w[i].len()-1]!=w[i+1][0]{j=false};
    }
    if j{println!("Yes");} else {println!("No");}
*/

//fn abs(a:i64)->i64{if a>0{a} else {-a}}
/*ABC109_C
    let nx:Vec<i64>=read_a();
    let n=nx[0] as usize;
    let x=nx[1];
    let mut a:Vec<i64>=read_a();
    let mut b:Vec<i64>=vec!();
    for i in 0..n{
        b.push(a[i as usize]-x);
    }
    fn gcd(a: i64, b: i64) -> i64 {
        if b == 0 {a} else {gcd(b, a % b)}
    }
    let mut ans=b[0];
    for i in 0..n{ans=gcd(ans,b[i]);}
    fn abs(a:i64)->i64{if a>0{a} else {-a}}
    ans=abs(ans);
    println!("{}",ans);
*/
/*ABC109_D
    input!{
        h: usize,
        w: usize,
        a: [[i32; w]; h],
    }
    let mut a=a;
    let mut n:usize=0;
    let mut ans=vec![];
    for i in 0..h{
        for j in 0..w{
            if j+1<w{
                if a[i][j]%2==1{
                    n+=1; a[i][j]-=1;a[i][j+1]+=1; ans.push((i+1,j+1,i+1,j+2));
                }
            }else if i+1<h{
                if a[i][j]%2==1{
                    n+=1; a[i][j]-=1;a[i+1][j]+=1; ans.push((i+1,j+1,i+2,j+1));
                }
            }
        }
    }
    println!("{}", n);
    for (x1,y1,x2,y2) in ans{
        println!("{} {} {} {}", x1,y1,x2,y2);
    }
*/

/*ABC108_A
    input!{
        k:usize,
    }
    let ans = {
        if k%2==0{k*k/4}else{k/2*(k-k/2)}
    };
    println!("{}",ans);
*/
/*ABC108_B
    input!{
        xy:[i32;4]
    }
    let x1=xy[0];
    let y1=xy[1];
    let x2=xy[2];
    let y2=xy[3];
    let x3=x2-y2+y1;
    let y3=y2+x2-x1;
    let x4=x1-y2+y1;
    let y4=y1+x2-x1;
    println!("{} {} {} {}", x3,y3,x4,y4);
*/
/*ABC107
    input!{
        ni:[i32;2],
    }
    let n=ni[0];let i=ni[1];
    println!("{}",n-i+1);
*/
/*ABC106
    input!{
        ab:[i32;2]
    }
    println!("{}",(ab[0]-1)*(ab[1]-1));
*/
/*ABC105
    input!{
        nk:[i32;2]
    }
    if nk[0]%nk[1]==0{println!("0");} else {println!("1");}
*/
/*ABC104
    input!{r:i32}
    let ans;
    if r<1200{ans="ABC";}else if r<2800{ans="ARC";} else {ans="AGC";}
    println!("{}",ans);
*/
/*ABC103
    input!{a:[i32;3]}
    let mut a=a;
    a.sort();
    fn abs(a:i32)->i32{if a>0{a} else {-a}}
    let ans=abs(a[1]-a[0])+abs(a[2]-a[1]);
    println!("{}",ans);
*/
/*ABC102
    input!{n:i64}
    let ans;
    if n%2==0{ans=n;}else{ans=2*n;}
    println!("{}", ans);
*/
/*ABC101
    input!{les:chars}
    let mut ans=0;
    for i in 0..les.len(){
        if les[i]=='+'{ans+=1;}else{ans-=1;}
    }
    println!("{}",ans);
*/
/*ABC100
*/
    input!{ab:[i32;2]}
    if ab[0]>8 || ab[1]>8{println!(":(");}else{println!("Yay!");}



}