#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; using namespace boost::multiprecision; using ll = long long; using ld = long double; using P = pair; using mint = modint998244353; #define int long long #define rep(i, s, n) for (ll i = (s); i < (ll)(n); i++) #define all(a) (a).begin(), (a).end() #define rall(a) (a).rbegin(), (a).rend() const ll INF = 1e18; const int dx[8] = {0, 1, 0, -1, -1, -1, 1, 1}; const int dy[8] = {1, 0, -1, 0, -1, 1, -1, 1}; template inline bool chmax(T &a, T b) { return ((a < b) ? (a = b, true) : (false)); } template inline bool chmin(T &a, T b) { return ((a > b) ? (a = b, true) : (false)); } void yn(bool t) { cout << (t ? "Yes" : "No") << endl; } uint64_t seed = chrono::duration_cast(chrono::high_resolution_clock::now().time_since_epoch()).count(); mt19937_64 rng(seed); int randint(int l, int r) { return uniform_int_distribution(l, r)(rng); } int solve() { int q; cin >> q; stack s; while (q--) { int t; cin >> t; if (t == 1) { char c; cin >> c; if (c == ')' && s.size() >= 2) { char s2 = s.top(); s.pop(); char s1 = s.top(); s.pop(); if (!(s1 == '(' && s2 == '|')) { s.push(s1); s.push(s2); s.push(c); } } else { s.push(c); } } else { if (s.size() >= 1) { s.pop(); } else { s.push('('); s.push('|'); } } yn(s.size() == 0); } return 0; } signed main() { #ifdef INPUT_FILE_PATH freopen(INPUT_FILE_PATH, "r", stdin); #endif ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); solve(); return 0; }