Example

Input

3
()(()((
))()()(()
)())(())


Output

Yes
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char str[1000];
int v[1000];
int L[1000];
int R[1000];
bool used[1000];
int main(){
	int a;
	scanf("%d",&a);
	for(int i=0;i<a;i++){
		scanf("%s",str);
		int n=strlen(str);
		int now=0;
		for(int j=0;j<n;j++){
			if(str[j]=='(')now++;
			else now--;
			L[i]=min(L[i],now);
		}
		v[i]=now;
		now=0;
		for(int j=n-1;j>=0;j--){
			if(str[j]==')')now++;
			else now--;
			R[i]=min(R[i],now);
		}
	}
	int sum=0;
	for(int i=0;i<a;i++)sum+=v[i];
	if(sum!=0){
		printf("No\n");
		return 0;
	}
	int val=0;
	for(int i=0;i<a;i++){
		int use=-1;
		int m=0;
		for(int j=0;j<a;j++){
			if(!used[j]&&v[j]>0&&val+L[j]>=0){
				if(m<v[j]){
					m=v[j];
					use=j;
				}
			}
		}
		if(~use){
			used[use]=true;
			val+=m;
		}
	}
	for(int i=0;i<a;i++){
		if(v[i]==0&&val+L[i]>=0)used[i]=true;
	}
	val=0;
	for(int i=0;i<a;i++){
		int use=-1;
		int m=0;
		for(int j=0;j<a;j++){
			if(!used[j]&&v[j]<0&&val+R[j]>=0){
				if(m<-v[j]){
					m=-v[j];
					use=j;
				}
			}
		}
		if(~use){
			used[use]=true;
			val+=m;
		}
	}
	bool ok=true;
	for(int i=0;i<a;i++)if(!used[i])ok=false;
	if(ok)printf("Yes\n");
	else printf("No\n");
}