Example

Input

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


Output

Yes
//  思维+贪心
// Aizu - 2681 
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <utility>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <cstdlib>
typedef long long ll;
#define lowbit(x) (x&(-x))
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
using namespace std;
const int N=1e2+9;
int n;
char s[N];
typedef pair<int,int>P;
P p[N];
P solve(char s[])
{
    int l=0,r=0;
    int i;
    for(i=0;s[i];i++){
        if(s[i]=='(')  l++;
        else if(l)  l--;
        else r++;
    }
    return P(l,r);//l为( 数目，r为)数目
}
bool vis[N];
int main()
{
    scanf("%d",&n);
    int  cnt=0;
    for(int i=0;i<n;i++)
    {
        scanf("%s",s);
        p[i]=solve(s);
        if(!p[i].second) cnt+=p[i].first,i--,n--;
        // cnt 为只有(的字符串的（的和
    }
     int ans=0,ret=1;
     memset(vis,0,sizeof(vis));
     int mx,id;
     for(int i=0;i<n&&ret;i++){
         id=-1,mx=-120;
         for(int j=0;j<n;j++)
         {
             if(vis[j]||ans<p[j].first) continue;
             int k=p[j].second-p[j].first;
             if(mx<k) mx=k,id=j;
         }
         //第一个放在最右边 ，依次往左（前）放。
        // mx 提供最多的右括号，（贪心）
         if(id==-1)  ret=0;
         vis[id]=1;
         ans+=mx;//ans 为这个字符串的净提供右括号数目。
     }
    // printf("%d %d %d\n",ret,ans,cnt);
     if(ret&&ans==cnt)  printf("Yes\n");
     else printf("No\n");
     return 0;
}
