#![allow(dead_code, unused_imports, unused_macros, non_snake_case)] fn main() { input! { Q: usize, } #[derive(Clone, Copy, Debug)] enum Stack { Empty, Node { letter: char, valid: bool, head: usize, } } let mut arena = vec![Stack::Empty, Stack::Node { letter: '!', valid: false, head: 0 }]; let mut states = vec![]; let mut stack = 0; for _ in 0 .. Q { input! { t: usize } if t == 1 { states.push(stack); input! { c: char } match c { '(' => { let i = arena.len(); arena.push(Stack::Node { letter: '(', head: stack, valid: false }); stack = i; } '|' => { if let Stack::Node { letter: '(', head, .. } = arena[stack] { let i = arena.len(); arena.push(Stack::Node { letter: '|', head, valid: false }); stack = i; } else { stack = 1; } } ')' => { if let Stack::Node { letter: '|', head, .. } = arena[stack] { stack = head; } else { stack = 1; } } _ => unreachable!() } } else { stack = states.pop().unwrap(); } if let Stack::Empty = arena[stack] { println!("Yes"); } else if let Stack::Node { valid: true, .. } = arena[stack] { println!("Yes"); } else { println!("No"); } } } use proconio::input;