#![allow(dead_code, unused_imports, unused_macros, non_snake_case)] #[fastout] fn main() { input! { Q: usize, } #[derive(Clone, Copy, Debug)] enum Stack { End, Error, Start(usize), Mid(usize), } let mut arena = vec![Stack::End, Stack::Error]; 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 { '(' => { if let Stack::End = arena[stack] { let i = arena.len(); arena.push(Stack::Start(stack)); stack = i; } else { stack = 1; } } '|' => { if let Stack::Start(head) = arena[stack] { let i = arena.len(); arena.push(Stack::Mid(head)); stack = i; } else { stack = 1; } } ')' => { if let Stack::Mid(head) = arena[stack] { stack = head; } else { stack = 1; } } _ => unreachable!() } } else { stack = states.pop().unwrap(); } if let Stack::End = arena[stack] { println!("Yes"); } else { println!("No"); } } } use proconio::{input, fastout};