#include<bits/stdc++.h>
     
    using namespace std;
    #define bit(x,i) (x&(1<<i))  //select the bit of position i of x
    #define lowbit(x) ((x)&((x)^((x)-1))) //get the lowest bit of x
    #define hBit(msb,n) asm("bsrl %1,%0" : "=r"(msb) : "r"(n)) //get the highest bit of x, maybe the fastest
    #define max(a,b) (a<b?b:a)
    #define min(a,b) (a>b?b:a)
    #define abs(x) (x<0?(-x):x) // big bug here if "-x" is not surrounded by "()"
    #define IN(i,l,r) (l<i&&i<r) //the next for are for checking bound
    #define LINR(i,l,r) (l<=i&&i<=r)
    #define LIN(i,l,r) (l<=i&&i<r)
    #define INR(i,l,r) (l<i&&i<=r)
    #define rep(i,n) for (i = 0; i < n; ++i) 
    #define REP(i,k,n) for (i = k; i <= n; ++i) 
    #define REPR(i,k,n) for (i = k; i >= n; --i)
    #define getI(a) scanf("%d", &a) //next three are handy ways to get ints, it's also force you to use '&' sign
    #define getII(a,b) scanf("%d%d", &a, &b)
    #define getIII(a,b,c) scanf("%d%d%d", &a, &b, &c)
    #define wez(n) int (n); scanf("%d",&(n)) //handy if the input is right after the definition of a variable
    #define wez2(n,m) int (n),(m); scanf("%d %d",&(n),&(m))
    #define wez3(n,m,k) int (n),(m),(k); scanf("%d %d %d",&(n),&(m),&(k))
    #define TESTS wez(testow)while(testow--) //for multilple cases problems
    #define whileZ int T; getI(T); while(T--) // the same as above
    #define getS(x) scanf("%s", x) //get a char* string
    #define clr(a,x) memset(a,x,sizeof(a)) //set elements of array to some value
    #define char2Int(c) (c-'0')
    #define lastEle(vec) vec[vec.size()-1] 
    #define SZ(x) ((int)((x).size()))
    #define REMAX(a,b) (a)=max((a),(b)) // set a to the maximum of a and b
    #define REMIN(a,b) (a)=min((a),(b));
    #define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) // traverse an STL data structure
    #define ALL(c) (c).begin(),(c).end() //handy for function like "sort()"
    #define PRESENT(c,x) ((c).find(x) != (c).end()) 
    #define CPRESENT(c,x) (find(ALL(c),x) != (c).end()) 
    #define ll long long //data types used often, but you don't want to type them time by time
    #define ull unsigned long long
    #define ui unsigned int
    #define us unsigned short
    #define IOS ios_base::sync_with_stdio(0);cin.tie(0); //to synchronize the input of cin and scanf
    #define INF 1001001001
    #define PI 3.1415926535897932384626
    //for map, pair
    #define mp make_pair
    #define fi first
    #define se second
    // for debug
    inline void pisz(int n) { printf("%d\n",n); }
    #define DBG(vari) cerr<<#vari<<" = "<<(vari)<<endl;
    #define printA(a,L,R) FE(i,L,R) cout << a[i] << (i==R?'\n':' ')
    #define printV(a) printA(a,0,a.size()-1)
    #define MAXN 10000
    //for vectors
    #define pb push_back
    typedef int elem_t;
    typedef vector<long long> vll;
    typedef vector<int> vi; 
    typedef vector<vi> vvi; 
    typedef pair<int,int> ii; 
    // directions
    const int fx[4][2] = {{0,1}, {0,-1}, {1,0}, {-1,0}};
    const int fxx[9][2] = {{0,0},{0,1}, {0,-1}, {1,0}, {-1,0}, {1,1}, {1,-1}, {-1,1}, {-1,-1}};
    #define   MOD 1000000007
    #define   MUD 1000000006
     
     
     
    int main() {
    	IOS 
    	ll n;
    	cin>>n;
    	ll forw[n] = {},backw[n] = {};

    	string s[n];
    	stack<char> eval;
    	
    	for(ll i=0;i<n;i++)
    	{
    		cin>>s[i];
    		//cout<<s<<"\n";
    		for(ll j=0;j<s[i].size();j++)
    		{
    			if(s[i][j]=='(')
    			{
    				eval.push(s[i][j]);
    			}
    			else
    			{
    				if(!eval.empty())eval.pop();
    				else
    				{
    					backw[i]++;
    				}
    			}
    		}
    		while(!eval.empty())
    		{
    			eval.pop();
    			forw[i]++;
    		}
    	}
    	//cout<<backw[1]<<" "<<forw[1]<<"\n";
    	vector<pair<ll,ll>> temp1,temp2;
    	vll ord;
    	for(ll i=0;i<n;i++)
    	{
    		if(forw[i]>=backw[i])
    		{
    			temp1.pb({backw[i],i});
    		}
    		else
    		{
    			temp2.pb({forw[i],i});
    		}
    		
    	}
    	
    	sort(temp1.begin(),temp1.end());
    	sort(temp2.begin(),temp2.end());
    	reverse(temp2.begin(),temp2.end());
    	for(ll i=0;i<temp1.size();i++)
    	{ord.pb(temp1[i].se);}
    	for(ll i=0;i<temp2.size();i++)
    	{ord.pb(temp2[i].se);}
    	//cout<<tp1<<" "<<tp2<<" "<<sum1<<" "<<sum2<<"\n";
    	
    	for(auto i: ord)
	{
		for(ll j=0;j<s[i].size();j++)
		{
			if(s[i][j]=='(')
			{
				eval.push(s[i][j]);
			}
			else
			{
				if(!eval.empty())eval.pop();
				else
				{
					cout<<"No";
					exit(0);
				}
			}
		}
	}
	if(eval.empty())
	cout<<"Yes";
	else cout<<"No";
    	
    	
    	return 0;
    }

Measured memory_bytes: 78084