#include typedef long long ll; typedef long double lb; using namespace std; #define all(x) (x).begin(), (x).end() #define OVERLOAD_REP(_1, _2, _3, name, ...) name #define REP1(i, n) for (auto i = std::decay_t{}; (i) != (n); ++(i)) #define REP2(i, l, r) for (auto i = (l); (i) != (r); ++(i)) #define rep(...) OVERLOAD_REP(__VA_ARGS__, REP2, REP1)(__VA_ARGS__) template bool chmin(T& a, const T& b){if(a > b){a = b; return 1;} return 0;} template bool chmax(T& a, const T& b){if(a < b){a = b; return 1;} return 0;} const ll INF = 1000000000000000000; // 10^18 int main(){ /* 0 = ( 1 = | 2 = ) */ ll q; cin >> q; stack a; ll cnt = 0; // 今の文字数 string s = ""; ll num = 0; // 有効な文字数 rep(i,q){ ll tmp; cin >> tmp; if(tmp == 1){ char c; cin >> c; if(num == cnt){ if(c == '('){ a.push(1); cnt++; num++; s += "("; }else if(c == '|' && !a.empty() && a.top() == 1){ a.pop(); a.push(2); cnt++; num++; s += "|"; }else if(c == ')' && !a.empty() && a.top() == 2){ a.pop(); cnt++; num++; s += ")"; }else{ cnt++; s += "#"; } }else{ cnt++; s += "#"; } } if(tmp == 2){ if(num == cnt){ cnt--; num--; if(s[s.size()-1] == '(') { a.pop(); } else if(s[s.size()-1] == '|'){ a.pop(); a.push(1); } else if(s[s.size()-1] == ')'){ a.push(2); } }else{ cnt--; } s.erase(s.size()-1); } if(a.empty() && num == cnt){ cout << "Yes" << endl; }else{ cout << "No" << endl; } } return 0; }