Problem:
Score : 600 points

Problem Statement

A bracket sequence is a string that is one of the following:

An empty string;

The concatenation of (, A, and ) in this order, for some bracket sequence A ;

The concatenation of A and B in this order, for some non-empty bracket sequences A and B /

Given are N strings S_i. Can a bracket sequence be formed by concatenating all the N strings in some order?

Constraints

1 \leq N \leq 10^6

The total length of the strings S_i is at most 10^6.

S_i is a non-empty string consisting of ( and ).

Input

Input is given from Standard Input in the following format:

N
S_1
:
S_N

Output

If a bracket sequence can be formed by concatenating all the N strings in some order, print Yes; otherwise, print No.

Sample Input 1

2
)
(()

Sample Output 1

Yes

Concatenating (() and ) in this order forms a bracket sequence.

Sample Input 2

2
)(
()

Sample Output 2

No

Sample Input 3

4
((()))
((((((
))))))
()()()

Sample Output 3

Yes

Sample Input 4

3
(((
)
)

Sample Output 4

No

Solution in C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
int n;
vector<string> s;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    string tmp;
    ll L = 0, R = 0, pl = 0, pr = 0;
    for (int i = 0; i < n; i++) {
        ll l = 0, r = 0;
        cin >> tmp;
        for (const char& c : tmp) {
            if (c == '(')
                l++;
            else if (c == ')' && l > 0)
                l--;
            else
                r++;
        }
        if (l == 0 && r > 0)
            R += r;
        else if (l > 0 && r == 0)
            L += l;
        else if (l > 0 && r > 0) {
            if (pl == 0 && pr == 0) {
                pl = l, pr = r;
            } else {
                if (min(pl, r) > min(pr, l)) {
                    if (pl >= r)
                        pl = pl - r + l;
                    else
                        pr = pr + r - pl, pl = l;
                } else {
                    if (pr >= l)
                        pr = pr - l + r;
                    else {
                        pl = pl + l - pr, pr = r;
                    }
                }
            }
        }
    }
    if (L >= pr && R >= pl && L - pr == R - pl) {
        cout << "Yes";
    } else {
        cout << "No";
    }
}