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;
struct bracket
{
	int a,b;
}c[1000005];
bool cmp(bracket x,bracket y)
{
	return x.a>y.a;
}
bool cmp2(bracket x,bracket y)
{
	return x.b>y.b;
}
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int t=0,maxt=0;
		char ch=getchar();
		while(ch!=')'&&ch!='(')ch=getchar();
		while(ch=='('||ch==')')
		{
			if(ch=='(')t++;
			else t--;
			maxt=max(maxt,-t);
			ch=getchar();
		}
		c[i].a=t,c[i].b=maxt;
	}
	sort(c+1,c+n+1,cmp);
	int now=0,st=0;
	for(int i=1;i<=n;i++)if(c[i].a>=0)now+=c[i].a;
	else
	{
		st=i;
		break;
	}
	//if(st!=0)sort(c+st,c+n+1,cmp2);
	if((!st)&&(!now))
	{
		puts("Yes");
			return 0;
	}
	for(int i=st;i<=n;i++)
		if(c[i].b>now)
		{
			puts("No");
			return 0;
		}
		else now+=c[i].a;
	if(now)puts("No");
	else puts("Yes");
	return 0;
}