Example

Input

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


Output

Yes
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <string>
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
#include <set>
#include <functional>
#include <iostream>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int n;
string str[101];
P p[101];
bool used[101];
vector<P> data;
vector<P> data2;
int main(void){
	scanf("%d",&n);
	int sum=0;
	int msum=0;
	for(int i=0;i<n;i++){
		cin >> str[i];
		int mini=0;
		int cnt=0;
		int out=0;
		for(int j=0;j<str[i].size();j++){
			if(str[i][j]=='('){
				cnt++;
			}else{
				if(cnt==0){
					out++;
				}else cnt--;
			}
		}
		if(out==0){
			sum+=cnt;
		}else if(cnt==0){
			msum+=out;
		}else{
			if(out<=cnt)data.push_back(P(out,cnt));
			else data2.push_back(P(cnt,out));
		}
	}
	memset(used,false,sizeof(used));
	bool flag=true;
	for(int i=0;i<data.size();i++){
		int nex=-1;
		for(int j=0;j<data.size();j++){
			if(sum>=data[j].first && !used[j]){
				nex=j;
			}
		}
		if(nex>=0){
			sum-=data[nex].first;
			sum+=data[nex].second;
			used[nex]=true;
		}else{
			flag=false;
		}
	}
	memset(used,false,sizeof(used));
	sort(data2.begin(),data2.end());
	for(int i=(int)data2.size()-1;i>=0;i--){
		sum-=data2[i].second;
		if(sum<0)flag=false;
		sum+=data2[i].first;
	}
	printf("%s\n",(sum==msum && flag)?"Yes":"No");
	return 0;
}