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;

#define ran 1001001

struct Node {
	int pre, det, suf;
	Node() {}
} info[ran];

int n;
char s[ran];

Node analysis() {
	int len = strlen(s);
	
	int h = 0;
	int mi = 0;
	for(int i=0;i<len;i++) {
		if(s[i]=='(') h++;
		else h--;
		mi = min(mi, h);
	}
	
	Node res;
	res.pre = -mi;
	res.det = h;
	res.suf = res.pre + res.det;
	return res;
}

int cmp(const Node &a, const Node &b) {
	bool fa = (a.det>=0), fb = (b.det>=0);
	if(fa!=fb) return fa;
	if(fa) return a.pre<b.pre;
	return a.suf > b.suf;
}

bool chk() {
	int sum = 0;
	for(int i=0;i<n;i++)
		sum += info[i].det;
	if(sum!=0) return false;
	
	sort(info, info+n, cmp);
	
	int cur = 0;
	for(int i=0;i<n;i++) {
		if(cur<info[i].pre) return false;
		cur += info[i].det;
	}
	return true;
}

int main() {
	scanf("%d", &n);
	
	for(int i=0;i<n;i++) {
		scanf("%s", s);
		info[i] = analysis();
	}
	
	puts(chk() ? "Yes" : "No");
	
	return 0;
}