#include using namespace std; typedef long long ll; typedef pair pii; typedef pair pll; typedef vector vi; typedef vector vll; typedef vector vs; // マクロ #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep2(i, a, n) for (int i = (a); i < (int)(n); i++) #define rrep(i, n) for (int i = (int)(n) - 1; i >= 0; i--) #define each(x, v) for (auto &x : v) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define sz(x) ((int)(x).size()) #define pb(x) push_back(x) #define mp(x, y) make_pair(x, y) const int INF = 1e9; const ll LINF = 1e18; const int MOD = 998244353; const int MAX_SIZE = 9000000; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int q; cin >> q; int size = 0; string s = ""; vector requireC; int ruleBreakPoint = MAX_SIZE; rep(_, q) { int query1; cin >> query1; if(query1 == 1){ size++; char c; cin >> c; s.push_back(c); if(ruleBreakPoint < size){ // donothing } else if(c == '('){ requireC.push_back('|'); } else if(requireC.empty()){ ruleBreakPoint = size; } else if(c == '|') { char reqC = requireC.back(); if(reqC == '|'){ requireC.pop_back(); requireC.push_back(')'); } else { ruleBreakPoint = size; } } else if(c == ')'){ char reqC = requireC.back(); if(reqC == ')'){ requireC.pop_back(); } else { ruleBreakPoint = size; } } } else if(query1 == 2) { if(ruleBreakPoint > size){ ruleBreakPoint = MAX_SIZE; if(s[size-1] == ')'){ requireC.push_back(')'); } else if(s[size-1] == '|'){ requireC.pop_back(); requireC.push_back('|'); } else if(s[size-1] == '('){ requireC.pop_back(); } } else if(ruleBreakPoint == size){ ruleBreakPoint = MAX_SIZE; } s.pop_back(); size--; } // cout << s << " rbp: " << ruleBreakPoint << " req: "; // for(char tmp: requireC){ // cout << tmp << " "; // } if(requireC.empty() && ruleBreakPoint == MAX_SIZE){ cout << "Yes" << endl; } else { cout << "No" << endl; } } return 0; }