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

1. An empty string;
2. The concatenation of `(`, A, and `)` in this order, for some bracket sequence A ;
3. 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`.

Examples

Input

2
)
(()


Output

Yes


Input

2
)(
()


Output

No


Input

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


Output

Yes


Input

3
(((
)
)


Output

No
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
struct node
{
	int l,r;
}g[maxn];
string s[maxn];
std::vector<node> v1;
std::vector<node> v2;
bool cmp1(node a,node b){
	return a.r<b.r;
}
bool cmp2(node a,node b){
	return a.l<b.l;
}
int main(){
	int n;
	scanf("%d",&n);
	for (int i = 1; i <=n; ++i)
	{
		cin>>s[i];
		int l = 0,r = 0;
		for (int j = 0; j <s[i].length(); ++j)
		{
			if(s[i][j] == '(') l++;
			else {
				if(l) l--;
				else r++;
			}
		/* code */
		}
			/* code */
		if(l>=r) v1.push_back({l,r});
		else v2.push_back({l,r});
		/* code */
	}

	sort(v1.begin(),v1.end(),cmp1);
	sort(v2.begin(),v2.end(),cmp2);
	int sum1 = 0, sum2 = 0, ok = 0;
	for (int i = 0; i <v1.size(); ++i)
	{
		sum1-=v1[i].r;

		if(sum1<0){
			ok = 1;
			break;
		}

		sum1+=v1[i].l;
		/* code */
	}
	for (int i = 0; i <v2.size(); ++i)
	{
		sum2-=v2[i].l;
		if(sum2<0){
			ok = 1;
			break;
		}
		sum2+=v2[i].r;
		/* code */
	}
	if(sum1 != sum2) ok = 1;
	if(ok){
		printf("No\n");
	}
	else printf("Yes\n");
	return 0;
}