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 Perl (5.26.1) (judge verdict: Wrong Answer)

my $s = <>;
chomp $s;
my @PDB;
my @MDB;
#my $sum=0;
my $state =0;
for(my $i=0;$i<$s;$i++){
    my $line = <>;chomp $line;
    my @dat = split(//,$line);
    #print "@dat\n";
    my $min=0;
    my $total=0;
    for(my $j=0;$j<=$#dat;$j++){
        #print "$dat[$j]\n";
      if($dat[$j] eq '(' ){
         #print "plus \n";
        $total++;
      }else{
        $total--;
      }
      if($min >$total ){ $min =$total;}
    }
    if( $min >=0 ){#-にならないならここで足してしまう
        $state = $state + $total;
        next;
    }
     my @row = ($total,$min);
    if( $total >=0){
      push (@PDB,\@row);
    }else{
      push (@MDB,\@row);
    }
    #print "$total $min \n";
    #$sum = $sum +$total;
}
if($state ==0){ print "No";exit;}
@PDB = sort{ $a->[1] <=> $b->[1]} @PDB;
#my @amari;

for(my $i=0;$i<=$#PDB;$i++){
  if(($state+$PDB[$i][1]) >= 0){#採用
    $state = $state + $PDB[$i][0];
    #print "@{$PDB[$i]} state $state \n ";
  }else{
    print "No";exit;
  }
}
@MDB = sort{ $a->[1] <=> $b->[1]} @MDB;

for(my $i=0;$i<=$#MDB;$i++){
  if(($state+$MDB[$i][1]) >= 0){#採用
    $state = $state + $MDB[$i][0];
    #print "@{$MDB[$i]} state $state \n ";
  }else{
    print "No";exit;
  }
}

if( $state == 0){
    print "Yes";
}else{
    print "No";
}