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)

typedef long long ll;
typedef long double ld;
#include <bits/stdc++.h>
using namespace std;
bool asc( const pair<ll,ll>& left, const pair<ll,ll>& right ) {
    if(left.first!=right.first){
        return left.first<right.first;
    }else{
        return left.second>right.second;   
    }
 }
 
 bool er( const pair<ll,ll>& left, const pair<ll,ll>& right ) {
    if(left.first!=right.first){
        return left.first>right.first;
    }else{
        return left.second<right.second;   
    }
 }
 
 
int main() {
    ll n;
    std::cin >> n;
    vector<string> s(n);
    // )(
    ll sum = 0;
    vector<pair<ll,ll>> hueru;
    vector<pair<ll,ll>> huen;
    vector<pair<ll,ll>> c(n);
    for (int i = 0; i < n; i++) {
        std::cin >> s[i];
        c[i] = {0,0};
        for (auto e : s[i]) {
            if(e==')'){
                if(c[i].second>0){
                    c[i].second--;
                }else{
                    c[i].first++;   
                }
            }else{
                c[i].second++;
            }
        }
        if(c[i].first<c[i].second){
            hueru.push_back({c[i].first,c[i].second});
        }else{
            huen.push_back({c[i].first,c[i].second});
        }
        sum += c[i].first;
        sum -= c[i].second;
    }
    
    if(sum!=0){
        std::cout << "No" << std::endl;
        return 0;
    }
    
    sort(hueru.begin(),hueru.end(),asc);
    sort(huen.begin(),huen.end(),er);
    // for (auto e : hueru) {
    //     std::cout << e.first<<" "<<e.second << std::endl;
    // }
    
    ll left = 0;
    
    for (auto e : hueru) {
        if(left>=e.first){
            left -= e.first;
            left += e.second;
        }else{
            std::cout << "No" << std::endl;
            return 0;
        }
    }
    // for (auto e : huen) {
    //     std::cout << e.first<<" "<<e.second << std::endl;
    // }
    ll sime = 0;
    for (auto e : huen) {
        if(e.second==0){
            sime = e.first;
            continue;
        }
        if(left>=e.first){
            left -= e.first;
            left += e.second;
        }else{
            std::cout << "No" << std::endl;
            return 0;
        }
    }
    left -= sime;
    if(left!=0){
        std::cout << "No" << std::endl;
    }else{
        std::cout << "Yes" << std::endl;
    }
}