use std::io; #[derive(Clone)] enum Hand { FullHouse{n2: u32, n3: u32}, ThreeCard{n: u32}, TwoPair{a: u32, b: u32}, OnePair{n: u32}, NoHand, } fn main() { let mut input = String::new(); io::stdin().read_line(&mut input).unwrap(); let nums = input.split_whitespace() .map(|x| x.trim().parse::().unwrap()) .collect::>(); use Hand::{NoHand, OnePair, TwoPair, ThreeCard, FullHouse}; let mut hand = NoHand; for &i in nums.iter() { let h = &mut hand; match *h { FullHouse{n2: _, n3: _} => (), _ => { let s = nums.iter().fold(0, |sum, x| sum + ((*x==i) as u32)); *h = match *h { NoHand if s == 2 => OnePair{n : i}, NoHand if s == 3 => ThreeCard{n: i}, OnePair{n: x} if s == 2 && x != i => TwoPair{a: x, b: i}, OnePair{n: x} if s == 3 => FullHouse{n2: x, n3: i}, ThreeCard{n: x} if s == 2 => FullHouse{n3: x, n2: i}, _ => (*h).clone(), } } } }; let output = match hand { NoHand => "NO HAND", OnePair{n: _} => "ONE PAIR", TwoPair{a: _, b: _} => "TWO PAIR", ThreeCard{n: _} => "THREE CARD", FullHouse{n2: _, n3: _} => "FULL HOUSE", }; println!("{}", output); }