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 pair<int,int> P;
template<typename T>
void fin(T a){
  cout<<a<<endl;
  exit(0);
}

signed main(){
  int n;cin>>n;
  int LL=0,RR=0;
  vector<P> vl,vr;//vl:)))((((((
  for(int i=0;i<n;i++){
    string s;cin>>s;
    int L,R,l=0,r=0;
    for(char p:s){
      if(p==')'){
        if(!r)l++;
        else r--;
      }
      else r++;
    }
    R=l;l=r=0;
    reverse(s.begin(),s.end());
    for(char p:s){
      if(p=='('){
        if(!r)l++;
        else r--;
      }
      else r++;
    }
    L=l;
    if(!R)LL+=L;
    else if(!L)RR+=R;
    else if(L>R)vl.push_back(P(R,L-R));
    else vr.push_back(P(L,R-L));
  }
  sort(vl.begin(),vl.end());
  sort(vr.begin(),vr.end());
  for(P p:vl){
    if(LL<p.first)fin("No");
    LL+=p.second;
  }
  for(P p:vr){
    if(RR<p.first)fin("No");
    RR+=p.second;
  }
  if(LL!=RR)fin("No");
  fin("Yes");
}
