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: Accepted)

local mmi, mma = math.min, math.max
local n = io.read("*n", "*l")
local up, down = {}, {}
for i = 1, n do
  local s = io.read()
  local cur = 0
  local min = 0
  for j = 1, #s do
    if s:sub(j, j) == "(" then
      cur = cur + 1
    else
      cur = cur - 1
    end
    min = mmi(min, cur)
  end
  local dec = -min
  if 0 <= cur then
    table.insert(up, {dec, cur})
  else
    local flag = s:sub(#s, #s) == "("
    table.insert(down, {dec, cur, flag})
  end
end

local function sort1(a, b)
  return a[1] < b[1]
end
local function sort2(a, b)
  if a[3] and not b[3] then
    return true
  elseif b[3] and not a[3] then
    return flase
  else
    return a[1] > b[1]
  end
end
table.sort(up, sort1)
table.sort(down, sort2)
local cur = 0
local valid = true
for i = 1, n do
  local dec, tot = 0, 0
  if i <= #up then
    dec, tot = up[i][1], up[i][2]
  else
    local p = i - #up
    dec, tot = down[p][1], down[p][2]
  end
  -- print(i, dec, tot)
  if cur - dec < 0 then
    -- print(cur, dec)
    valid = false
    break
  end
  cur = cur + tot
  if cur < 0 then valid = false break end
  -- print(i)
end
if valid then
  valid = cur == 0
end
-- valid = valid and cur == 0
print(valid and "Yes" or "No")