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>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
using namespace std;
using namespace __gnu_pbds;   
#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update> 
#define ll long long int
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define pll pair<ll,ll>
#define all(x) x.begin(),x.end()
#define sz(x) (ll)x.size() 
 
string a[1000005];
int main()
{
    ios_base::sync_with_stdio(false);
	ll n,i,j,k,x,y,t,m;

	cin >> n;
	for(i=1;i<=n;i++)
	{
		cin >> a[i];
	}
	vector< pair< pll , ll > >v;
	ll type2=0,type1=0;
	for(i=1;i<=n;i++)
	{
		x=0,y=0;
		deque<char>Q;
		m=sz(a[i]);
		for(j=0;j<m;j++)
		{
			if(a[i][j]==')')
			{
				if(!Q.empty() && Q.back()=='(')
					Q.pop_back();
				else
					Q.push_back(')');
			}
			else
				Q.push_back('(');
		}
		while(!Q.empty())
		{
			char c=Q.front();
			Q.pop_front();
			if(c=='(')
				x++;
			else
				y++;
		}
		if(!x || !y)
		{
			if(!x)
				type2+=y;
			else
				type1+=x;
		}
		else
		{
			v.pb({{x,y},i});
		}
	}
	sort(all(v));

	string g="";
	for(i=0;i<sz(v);i++)
		g+=a[v[i].ss];

	deque<char>Q;
	for(i=0;i<sz(g);i++)
	{
		if(g[i]==')')
		{
			if(!Q.empty() && Q.back()=='(')
				Q.pop_back();
			else
				Q.push_back(')');
		}
		else
			Q.push_back('(');
	}

	x=0,y=0;
	while(!Q.empty())
	{
		char c=Q.front();
		Q.pop_front();
		if(c=='(')
			x++;
		else
			y++;
	}

	// cout<<g<<endl;

	if(type2>=x && type1>=y)
	{
		if((type2-x)==(type1-y))
			cout<<"Yes"<<endl;
		else
			cout<<"No"<<endl;
	}
	else
		cout<<"No"<<endl;
}