#include // min, max, swap, sort, reverse, lower_bound, upper_bound #include // bitset #include // isupper, islower, isdigit, toupper, tolower #include // cmathライブラリをインクルード #include // int64_t, int*_t #include // printf #include // deque #include #include // cout, endl, cin #include // map #include // queue, priority_queue #include // set #include // stack #include // string, to_string, stoi #include // tuple, make_tuple #include // unordered_map #include // unordered_set #include // pair, make_pair #include // vector using namespace std; //using namespace atcoder; using ll = long long; //using mint = modint998244353; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define Yout cout << "Yes" << '\n' #define Nout cout << "No" << '\n' #define pb push_back #define mp make_pair #define ft first #define sd second // #define _LIBCPP_DEBUG 0と書く必要があります。 const ll mod = 998244353; const ll mod2 = (long long)1000000007; const ll INF = (long long)2e18; const vector dx = {1, 0, -1, 0}; const vector dy = {0, 1, 0, -1}; // const vector dx = {1, 1, 1, 0, -1, -1, -1, 0}; // const vector dy = {1, 0, -1, -1, -1, 0, 1, 1}; // const vector dx = {1, -1, 1, -1}; // const vector dy = {1, 1, -1, -1}; template void li(T a) { for (auto i : a) { cout << i << ' '; } cout << endl; } template inline bool chmin(T &a, T b) { if (a > b) { a = b; return true; } return false; } template inline bool chmax(T &a, T b) { if (a < b) { a = b; return true; } return false; } bool ch(ll l, ll r, ll x) { return l <= x and x < r; } bool chch(ll h, ll w, ll x, ll y) { return ch(0, h, x) and ch(0, w, y); } void solve(){ ll q;cin >> q; vector> a(1,vector(3,0)); vector sm(1,true); vector d(1,true); string s=" "; rep(i,q){ ll id;cin >> id; if(id==1){ char c;cin >> c; bool f=true; auto nex=a.back(); if(c=='('){ nex[0]++; } else if(c==')'){ nex[2]++; if(s.back()=='('){ f=false; } } else{ nex[1]++; if(s.back()=='|'){ f=false; } } a.pb(nex); s+=c; if(nex[1]>nex[0] or nex[2]>nex[0] or nex[2]>nex[1]){ f=false; } sm.pb(f && sm.back()); d.pb(f); } else{ //sm.pop_back(); a.pop_back(); sm.pop_back();d.pop_back(); } /* rep(j,3){ rep(k,a.size()){ cout << a[k][j] << ' '; }cout << endl; } li(d); li(sm); cout << endl; */ auto p=a.back(); if(p[0]==p[1] and p[1]==p[2] and sm.back()){ Yout; } else{ Nout; } } } int main(){ solve();}