Problem:
Score : 200 points

Problem Statement

You have a digit sequence S of length 4. You are wondering which of the following formats S is in:

YYMM format: the last two digits of the year and the two-digit representation of the month (example: 01 for January), concatenated in this order

MMYY format: the two-digit representation of the month and the last two digits of the year, concatenated in this order

If S is valid in only YYMM format, print YYMM; if S is valid in only MMYY format, print MMYY; if S is valid in both formats, print AMBIGUOUS; if S is valid in neither format, print NA.

Constraints

S is a digit sequence of length 4.

Input

Input is given from Standard Input in the following format:

S

Output

Print the specified string: YYMM, MMYY, AMBIGUOUS or NA.

Sample Input 1

1905

Sample Output 1

YYMM

May XX19 is a valid date, but 19 is not valid as a month. Thus, this string is only valid in YYMM format.

Sample Input 2

0112

Sample Output 2

AMBIGUOUS

Both December XX01 and January XX12 are valid dates. Thus, this string is valid in both formats.

Sample Input 3

1700

Sample Output 3

NA

Neither 0 nor 17 is valid as a month. Thus, this string is valid in neither format.

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

use std::io::stdin;
use std::io::Error;
use std::io::Read;

#[derive(Debug)]
struct Input {
    s: String,
}

fn handle_input(input_str: String) -> Result<Input, Error> {
    let mut iter = input_str.split_whitespace();
    let s = iter.next().unwrap();
    let input = Input { s: s.to_string() };
    Ok(input)
}

fn mm(input: &String) -> bool {
    let mut iter = input.chars();
    let c1 = iter.next().unwrap();
    let c2 = iter.next().unwrap();
    if c1 == '0' {
        return c2 >= '1' && c2 <= '9';
    }
    if c1 == '1' {
        return c2 >= '0' && c2 <= '2';
    }
    false
}

fn yy(input: &String) -> bool {
    let mut iter = input.chars();
    let c1 = iter.next().unwrap();
    let c2 = iter.next().unwrap();
    c1 >= '0' && c1 <= '9' && c2 >= '0' && c2 <= '9'
}

fn handle_output(input: Input) -> Result<String, Error> {
    let tail = input.s.chars().skip(2).collect();
    if yy(&input.s) && mm(&tail) {
        if mm(&input.s) && yy(&tail) {
            return Ok("AMBIGUOUS".to_string());
        }
        return Ok("YYMM".to_string());
    }
    if mm(&input.s) && yy(&tail) {
        return Ok("MMYY".to_string());
    }
    Ok("NA".to_string())
}

fn main() {
    let mut input_str = String::new();
    stdin().read_to_string(&mut input_str).unwrap();
    let input = handle_input(input_str).unwrap();
    let output = handle_output(input).unwrap();
    println!("{}", output);
}