Example

Input

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


Output

Yes
#include <bits/stdc++.h>
using namespace std;

#define rep(i, n) for(int i = 0; i < (n); i++)
#define repp(i, l, r) for(int i = (l); i < (r); i++)
#define per(i, n) for(int i = ((n)-1); i >= 0; i--)
#define perr(i, l, r) for(int i = ((r)-1); i >= (l); i--)
#define all(x) (x).begin(),(x).end()
#define MOD 1000000007
#define IINF 1000000000
#define LINF 1000000000000000000
#define SP <<" "<<
#define CYES cout<<"Yes"<<endl
#define CNO cout<<"No"<<endl
#define CFS cin.tie(0);ios::sync_with_stdio(false)

typedef long long LL;
typedef long double LD;

int main(){
  int n;
  cin >> n;
  vector<pair<int,int>> v(n);
  int l=0,r=0;
  string s;
  rep(i,n){
    cin >> s;
    stack<int> st;
    rep(j,s.length()){
      if(s[j]=='('){
        l++;
        st.push(0);
      }else{
        r++;
        if(st.size()>0){
          if(st.top()==0) st.pop();
          else st.push(1);
        }else{
          st.push(1);
        }
      }
    }
    int x=0,y=0;
    while(!st.empty()){
      if(st.top()==1) x++;
      else y++;
      st.pop();
    }
    v[i]={x,y};
  }
  if(l!=r){
    CNO;
    return 0;
  }
  vector<bool> usd(n,false);
  int now=0;
  int count=0;
  for(int i=0;i<n;i++){
    pair<int,int> ma(-IINF,-1);
    for(int j=0;j<n;j++){
      if(v[j].first<=now&&(!usd[j])) ma=max(ma,{v[j].second-v[j].first,j});
    }
    if(ma.second==-1){
      CNO;
      return 0;
    }
    if(ma.first<0) break;
    now+=ma.first;
    usd[ma.second]=true;
    count++;
    if(now<0){
      CNO;
      return 0;
    }
  }
  now=0;
  for(int i=0;i<n-count;i++){
    pair<int,int> ma(-IINF,-1);
    for(int j=0;j<n;j++){
      if(v[j].second<=now&&(!usd[j])) ma=max(ma,{v[j].first-v[j].second,j});
    }
    if(ma.second==-1){
      CNO;
      return 0;
    }
    now+=ma.first;
    usd[ma.second]=true;
    if(now<0){
      CNO;
      return 0;
    }
  }
  CYES;
  return 0;
}

