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>

#define fi first
#define se second
#define U unsigned
#define P std::pair<int,int>
#define LL long long
#define pb push_back
#define MP std::make_pair
#define all(x) x.begin(),x.end()
#define CLR(i,a) memset(i,a,sizeof(i))
#define FOR(i,a,b) for(int i = a;i <= b;++i)
#define ROF(i,a,b) for(int i = a;i >= b;--i)
#define DEBUG(x) std::cerr << #x << '=' << x << std::endl
const int MAXN = 2e6 + 5;

std::string str[MAXN];
int n,sm;
int lft[MAXN],rst[MAXN];

int main(){
	scanf("%d",&n);
	FOR(i,1,n) std::cin >> str[i];
	FOR(i,1,n){
		int len = str[i].length();
		int t1=0,now = 0;
		FOR(j,0,len-1){
			if(str[i][j] == '(') now++,sm++;
			else{
				now--;if(now < 0) t1++,now = 0;
				--sm;
			}
		}
		lft[i] = now;rst[i] = t1;
	}
	if(sm != 0){
		puts("No");return 0;
	}
	sm = 0;
	FOR(i,1,n) if(rst[i] == 0) sm += lft[i];
	FOR(i,1,n){
		if(rst[i] && lft[i]){
			sm -= rst[i];
			if(sm< 0){
				puts("No");
				return 0;
			}
			sm += lft[i];
		}
	}
	puts("Yes");
	return 0;
}