import sys input = sys.stdin.readline Q = int(input()) # 可持久化栈结点 # 结点 0 表示空栈 stage = [0] # stage[i] = 0 / 1 nxt = [0] # nxt[i] = 下一个结点编号 # 当前字符串每个长度对应的状态 # tops[-1] / oks[-1] 就是当前 S 的状态 tops = [0] # 栈顶结点编号 oks = [True] # 当前前缀是否仍然可能合法 ans = [] for _ in range(Q): q = input().split() if q[0] == '1': c = q[1] top = tops[-1] ok = oks[-1] if not ok: # 已经错了,继续追加也不可能恢复 tops.append(top) oks.append(False) else: if c == '(': # 压入阶段 0 stage.append(0) nxt.append(top) tops.append(len(stage) - 1) oks.append(True) elif c == '|': # 栈顶必须是阶段 0 if top == 0 or stage[top] == 1: tops.append(top) oks.append(False) else: # 把栈顶从 0 变成 1(持久化做法:新建一个点) stage.append(1) nxt.append(nxt[top]) tops.append(len(stage) - 1) oks.append(True) else: # c == ')' # 栈顶必须是阶段 1 if top == 0 or stage[top] == 0: tops.append(top) oks.append(False) else: # 弹栈 tops.append(nxt[top]) oks.append(True) else: # 删除末尾字符:直接回退一个状态 tops.pop() oks.pop() ans.append("Yes" if oks[-1] and tops[-1] == 0 else "No") print("\n".join(ans))