Problem:
Score : 600 points

Problem Statement

A bracket sequence is a string that is one of the following:

An empty string;

The concatenation of (, A, and ) in this order, for some bracket sequence A ;

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.

Sample Input 1

2
)
(()

Sample Output 1

Yes

Concatenating (() and ) in this order forms a bracket sequence.

Sample Input 2

2
)(
()

Sample Output 2

No

Sample Input 3

4
((()))
((((((
))))))
()()()

Sample Output 3

Yes

Sample Input 4

3
(((
)
)

Sample Output 4

No

Solution in Java (OpenJDK 11.0.6) (judge verdict: Wrong Answer)

import java.util.*;
class Main{
  public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    sc.nextLine();
    String str[]=new String[n];
    int kakko[][] = new int[n][2];
    int xx=0,yy=0;
    boolean flg1=false,flg2=false;
    int saisa=0,saiu=0;
    for(int i=0;i<n;i++){
      str[i]=change(sc.nextLine(),kakko[i]);
      if(kakko[i][0]==0&&kakko[i][1]==0){
        n--;i--;
      }else{
        xx+=kakko[i][0]; yy+=kakko[i][1];
        if(kakko[i][0]==0){
          flg1=true;
          saiu+=kakko[i][1];
        }
        if(kakko[i][1]==0){
          flg2=true;
          saisa+=kakko[i][0];
        }
      }
    }

    if(xx!=yy||!flg1||!flg2){
      pl("No");
    }else{
      int count=0;
      for(int i=0;i<n;i++){
        if(kakko[i][0]!=0&&kakko[i][1]!=0){
          count++;
          if(saisa>=kakko[i][1]){
            flg1=false;
          }
          if(saiu>=kakko[i][0]){
            flg2=false;
          }
        }
      }
      if(count>0&&(flg1||flg2)){
        pl("No");
      }else{
      pl("Yes");
      }
    }
  }

  public static String change(String str,int[]k){
    int n = str.length();
    String s = "";
    for(int i=0;i<n;i++){
      char c = str.charAt(i);
      if(!s.equals("")&&c==')'&&s.charAt(s.length()-1)=='('){
        s=s.substring(0,s.length()-1);
        k[0]--;
      }else{
        s+=String.valueOf(c);
        k[c-40]++;
      }
    }
    return s;
  }

  public static void pr(String str){
    System.out.print(str);
  }
  public static void pl(String str){
    System.out.println(str);
  }
}