import sys input = sys.stdin.readline Q = int(input()) stack = [] history = [] invalid = 0 for _ in range(Q): query = input().split() if query[0] == '1': c = query[1] if c == '(': stack.append([False, True]) # has_bar, valid history.append(('push',)) elif c == '|': if stack: old = stack[-1][0] stack[-1][0] = True history.append(('bar', old)) else: history.append(('bar_empty',)) else: # ')' if not stack: invalid += 1 history.append(('bad_close',)) else: has_bar, valid = stack.pop() was_invalid = False if not has_bar or not valid: invalid += 1 was_invalid = True if stack: parent = stack[-1] old_bar = parent[0] old_valid = parent[1] parent[0] |= has_bar parent[1] &= valid history.append(('pop_merge', has_bar, valid, old_bar, old_valid, was_invalid)) else: history.append(('pop_root', has_bar, valid, was_invalid)) else: op = history.pop() if op[0] == 'push': stack.pop() elif op[0] == 'bar': stack[-1][0] = op[1] elif op[0] == 'bar_empty': pass elif op[0] == 'bad_close': invalid -= 1 elif op[0] == 'pop_merge': has_bar, valid, old_bar, old_valid, was_invalid = op[1:] parent = stack[-1] parent[0] = old_bar parent[1] = old_valid if was_invalid: invalid -= 1 stack.append([has_bar, valid]) elif op[0] == 'pop_root': has_bar, valid, was_invalid = op[1:] if was_invalid: invalid -= 1 stack.append([has_bar, valid]) if invalid == 0 and not stack: print("Yes") else: print("No")