/* -*- coding: utf-8 -*- * * 3503.cc: No.3503 Brackets Stack Query 2 - yukicoder */ #include #include #include using namespace std; /* constant */ const int MAX_N = 800000; /* typedef */ using vc = vector; /* global variables */ bool fs[MAX_N + 1]; vc cvs[MAX_N]; /* subroutines */ /* main */ int main() { int qn; scanf("%d", &qn); int d = -1, n = 0; vc s; fs[0] = true; while (qn--) { int op; scanf("%d", &op); if (op == 1) { char cs[4]; scanf("%s", cs); char c = cs[0]; if (! fs[n]) fs[n + 1] = false; else { if (c == '(') { d++; cvs[d].push_back(c); s.push_back(c); fs[n + 1] = true; } else if (c == '|') { if (d >= 0 && ! cvs[d].empty() && cvs[d].back() == '(') { cvs[d].push_back(c); s.push_back(c); fs[n + 1] = true; } else fs[n + 1] = false; } else { // c == ')' if (d >= 0 && ! cvs[d].empty() && cvs[d].back() == '|') { cvs[d].push_back(c); d--; s.push_back(c); fs[n + 1] = true; } else fs[n + 1] = false; } } n++; } else { // op == 2 if (fs[n]) { char c = s.back(); s.pop_back(); if (c == '(') { cvs[d].pop_back(); d--; } else if (c == '|') { cvs[d].pop_back(); } else { // c == ')' d++; cvs[d].pop_back(); } } n--; } if (fs[n] && d < 0) puts("Yes"); else puts("No"); } return 0; }