use std::collections::HashSet; fn _read() -> Vec<(bool, Vec)> { let mut ret: Vec<(bool, Vec)> = Vec::new(); let mut _s = String::new(); std::io::stdin().read_line(&mut _s).ok(); loop { let mut _s = String::new(); let _len = std::io::stdin().read_line(&mut _s).ok(); if _len.unwrap() == 0 { break; } let mut _v: Vec = _s .split_ascii_whitespace() .map(|e| e.trim().to_string()) .collect(); let _item: (bool, Vec) = ( _v.pop().unwrap() == "YES", _v.iter().map(|e| e.trim().parse().ok().unwrap()).collect(), ); ret.push(_item); } ret } fn calc(data: Vec<(bool, Vec)>) -> i8 { let mut _ans: HashSet = (0..=9).collect(); for (stat, val) in data { let remove_targets: HashSet = match stat { true => &((0..=9).collect::>()) - &(val.iter().cloned().collect()), false => val.iter().cloned().collect(), }; for n in remove_targets { _ans.remove(&n); } } for n in _ans { return n; } return -1 } fn main() { let data: Vec<(bool, Vec)> = _read(); println!("{}", calc(data)); }