Example

Input

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


Output

Yes
#include <bits/stdc++.h>
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;
struct P{
    int l,r,x;
    P(int a,int b){
        l=a;r=b;
        x=l+r;
    }
    bool operator<(const P& a) const {
    return x==a.x?abs(l)+abs(r)>abs(a.l)+abs(a.r):x<a.x;
  }
};

int n;
string s[111];
vector<P>v;

void Input(){
  cin>>n;
  r(i,n){
    cin>>s[i];
    while(1){
      int f=0;
      r(j,(int)s[i].size()){
        if(s[i][j]=='('&&s[i][j+1]==')'){
          s[i].erase(s[i].begin()+j,s[i].begin()+j+2);
          f++;
          break;
        }
      }
      if(!f)break;
    }
  }
  r(i,n){
    int l=0,r=0,f=0;
    r(j,s[i].size()){
        if(j&&s[i][j-1]!=s[i][j])f++;
        if(f)r++;
        else l++;
    }
    if(s[i][0]==')')v.push_back(P(-l,r));
    else v.push_back(P(l,-r));
  }
}

bool used[111];

int sol(int a){
    sort(v.begin(),v.end());
    reverse(v.begin(),v.end());
    string t;
    memset(used,0,sizeof(used));
    int p=0;
    r(i,n){
        int f=0;
        if(i<a){
        r(j,n)if(!used[j]){
            if(p+v[j].l>=0&&p+v[j].l+v[j].r>=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }}
        else{
            for(int j=n-1;j>=0;j--)if(!used[j]){
            if(p+v[j].l>=0&&p+v[j].l+v[j].r>=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }}
        }
        if(!f)return 0;
    }
    if(p)return 0;
    return 1;
}

int sol2(int a){
    string t;
    memset(used,0,sizeof(used));
    int p=0;
    r(i,n){
        int f=0;
        if(i<a){
        r(j,n)if(!used[j]){
            if(p+v[j].r<=0&&p+v[j].l+v[j].r<=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }}
        else{
            for(int j=n-1;j>=0;j--)if(!used[j]){
            if(p+v[j].r<=0&&p+v[j].l+v[j].r<=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }
        }
        if(!f)return 0;
    }
    if(p)return 0;
    return 1;
}

int sol3(int a){a++;
    string t;
    memset(used,0,sizeof(used));
    int p=0;
    r(i,n){
        int f=0;
        if(!(i%a==(a-1))){
        r(j,n)if(!used[j]){
            if(p+v[j].l>=0&&p+v[j].l+v[j].r>=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }}
        else{
            for(int j=n-1;j>=0;j--)if(!used[j]){
            if(p+v[j].l>=0&&p+v[j].l+v[j].r>=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }
        }
        if(!f)return 0;
    }
    if(p)return 0;
    return 1;
}

int sol4(int a){a++;
    string t;
    memset(used,0,sizeof(used));
    int p=0;
    r(i,n){
        int f=0;
        if(!(i%a==(a-1))){
        r(j,n)if(!used[j]){
            if(p+v[j].r<=0&&p+v[j].l+v[j].r<=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }}
        else{
            for(int j=n-1;j>=0;j--)if(!used[j]){
            if(p+v[j].r<=0&&p+v[j].l+v[j].r<=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }
        }
        if(!f)return 0;
    }
    if(p)return 0;
    return 1;
}

int sol5(int a,int b){a++;
    string t;
    memset(used,0,sizeof(used));
    int p=0,ff=0;
    r(i,n){
        int f=0;
        if(a==53){
            r(j,n)if(v[j].x==0){
                if(!used[j]){
                if(p+v[j].l>=0&&p+v[j].l+v[j].r>=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }}}
            if(!f)goto L;
        }

        else if(!(i%a==(a-1)||ff)){L:;
        r(j,n)if(!used[j]){
            if(p+v[j].l>=0&&p+v[j].l+v[j].r>=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }}
        else{
            if(!ff)ff=b;
            for(int j=n-1;j>=0;j--)if(!used[j]){
            if(p+v[j].l>=0&&p+v[j].l+v[j].r>=0){
                p+=v[j].l;
                p+=v[j].r;
                used[j]=1;
                f++;
                break;
            }
        }
        ff--;
        }
        if(!f)return 0;
    }
    if(p)return 0;
    return 1;
}

int main(){
  Input();
  r(i,n)if(sol(i)){
    cout<<"Yes"<<endl;
    exit(0);
  }reverse(v.begin(),v.end());
  r(i,n)if(v[i].r==0)swap(v[i].l,v[i].r);
  r(i,n)if(sol2(i)){
    cout<<"Yes"<<endl;
    exit(0);
  }reverse(v.begin(),v.end());
  r(i,n)if(v[i].r==0)swap(v[i].l,v[i].r);
  r(i,n)if(sol3(i)){
    cout<<"Yes"<<endl;
    exit(0);
  }reverse(v.begin(),v.end());
  r(i,n)if(v[i].r==0)swap(v[i].l,v[i].r);
  r(i,n)if(sol4(i)){
    cout<<"Yes"<<endl;
    exit(0);
  }reverse(v.begin(),v.end());
  r(i,n)if(v[i].r==0)swap(v[i].l,v[i].r);
  r(i,n)r(j,n)if(sol5(i,j)){
    cout<<"Yes"<<endl;
    exit(0);
  }
  cout<<"No"<<endl;
}
