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 Lua (LuaJIT 2.1.0) (judge verdict: Wrong Answer)

local mmi, mma = math.min, math.max
local n = io.read("*n", "*l")
local s = {}
local t = {}
-- local up, down = {}, {}
for i = 1, n do
  s[i] = io.read()
  local cur = 0
  local min = 0
  for j = 1, #s[i] do
    if s[i]:sub(j, j) == "(" then
      cur = cur + 1
    else
      cur = cur - 1
    end
    min = mmi(min, cur)
  end
  t[i] = {min, cur}
  -- if 0 <= cur then
  --   table.insert(up, {min, cur})
  -- else
  --   table.insert(down, {min, cur})
  -- end
end
local function sortfunc(a, b)
  -- return a[1] > b[1]
  if 0 <= a[2] * b[2] then
    return a[1] > b[1]
  else
    return a[2] > b[2]
  end

  -- if 0 <= a[2] and 0 <= b[2] then
  --   return a[1] >= b[1]
  -- elseif a[2] < 0 and b[2] < 0 then
  --   return a[1] >= b[1]
  -- else
  --   return a[2] > b[2]
  -- end
end
table.sort(t, sortfunc)
local cur = 0
local valid = true
for i = 1, n do
  local min, last = t[i][1], t[i][2]
  if cur + min < 0 then
    valid = false
    break
  end
  cur = cur + last
end
valid = valid and cur == 0
print(valid and "Yes" or "No")