#include #include using namespace std; // Cấu trúc để lưu lại trạng thái stack tại mỗi bước vector st[800005]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int Q; cin >> Q; int cur_len = 0; // Độ dài của chuỗi S thực tế // st[0] mặc định là stack rỗng for (int i = 1; i <= Q; ++i) { int type; cin >> type; if (type == 1) { char c; cin >> c; // Lấy stack trạng thái từ bước trước đó (S có độ dài cur_len) st[cur_len + 1] = st[cur_len]; cur_len++; vector& current_st = st[cur_len]; current_st.push_back(c); // Kiểm tra triệt tiêu: Nếu 3 ký tự cuối là '(', '|', ')' int s_size = current_st.size(); if (s_size >= 3 && current_st[s_size - 1] == ')' && current_st[s_size - 2] == '|' && current_st[s_size - 3] == '(') { current_st.pop_back(); current_st.pop_back(); current_st.pop_back(); } } else { // Loại 2: Quay lại trạng thái trước đó cur_len--; } // Nếu stack tại trạng thái hiện tại rỗng thì là dãy tốt if (st[cur_len].empty()) { cout << "Yes\n"; } else { cout << "No\n"; } } return 0; }