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
	import java.util.*;
	import java.util.Map.Entry;
	 
	 
	 class Main {
//		 static int mod =  (int) (Math.pow(10,9)+7);
		 static int mod =  (int) 998244353;
		 static List<ArrayList<Integer>>  list = new ArrayList<ArrayList<Integer>>();
	    public static void main(String[] args) {
	    	
	        Scanner sc = new Scanner(System.in);
	        int N = sc.nextInt();

	        String[] S = new String[N];
	        int[][] minlast = new int[N][4];
	        for (int i=0 ; i<N; i++) {
	            S[i] = sc.next();
	            char[] c = S[i].toCharArray();
	            int now =0;
	            for(int j=0;j<S[i].length();j++) {
	            	if(c[j]=='(') {
	            		now++;
	            	} else {
	            		now--;
	            		minlast[i][0] = Math.min(minlast[i][0], now);
	            	}
	            }
	            minlast[i][1]=now;
	            minlast[i][2]=minlast[i][0]-now;
	        }
	        Arrays.sort(minlast, (b, c) -> Integer.compare(b[0], c[0]));
	        boolean[] used = new boolean[N];
	        int now1 = 0;
	        for(int i=N-1;i>=0;i--) {
	        	if(minlast[i][1]>0) {
	        		if(now1+minlast[i][0]<0) {
	        			System.out.println("No");
	        			return;
	        		}
	        		now1=now1+minlast[i][1];
	        	}
	        }
	        
	        for(int i=0;i<N;i++) {
	        	if(minlast[i][1]==0) {
	        		if(now1+minlast[i][0]<0) {
	        			System.out.println("No");
	        			return;	        			
	        		}
	        		now1=now1+minlast[i][1];
	        	}
	        }
	        Arrays.sort(minlast, (b, c) -> Integer.compare(b[2], c[2]));
	        int now2 = 0;
	        for(int i=N-1;i>=0;i--) {
	        	if(minlast[i][1]<0) {
	        		if(now2+minlast[i][2]<0) {
	        			System.out.println("No");
	        			return;	        			
	        		}
	        		now2=now2-minlast[i][1];
	        	}
	        }
	        

	        if(now1==now2) {
	        	System.out.println("Yes");
	        } else {
	        	System.out.println("No");
	        }

	    }
	    
	    

	}