This is yet another problem dealing with regular bracket sequences.

We should remind you that a bracket sequence is called regular, if by inserting «+» and «1» into it we can get a correct mathematical expression. For example, sequences «(())()», «()» and «(()(()))» are regular, while «)(», «(()» and «(()))(» are not. 

You are given a string of «(» and «)» characters. You are to find its longest substring that is a regular bracket sequence. You are to find the number of such substrings as well.
The first line of the input file contains a non-empty string, consisting of «(» and «)» characters. Its length does not exceed 10<sup class="upper-index">6</sup>.
li = list(input())
maxHeight = countMaxHeight = 0
last = 0
stack = []

for index in range(len(li)) :
    if index + 1 == len(li) and li[index] == ")" :
        last = stack[-1]
        if len(stack) == 1 and li[0] == "(" : last = 0
        res = index - last + 1
        if res > maxHeight :
            maxHeight = res
            countMaxHeight = 1
        elif res == maxHeight :
            countMaxHeight += 1
    
    elif li[index] == "(" :
        stack.append(index)
    else :
        if len(stack) > 0 : 
            stack.pop()
        else :
            res = index - last - 1
            if res > maxHeight :
                maxHeight = res
                countMaxHeight = 1
            elif res == maxHeight :
                countMaxHeight += 1
            last = index
for index in range(len(stack) - 1) :
    res = stack[index + 1] - stack[index] - 1
    if res > maxHeight :
        maxHeight = res
        countMaxHeight = 1
    elif res == maxHeight :
        countMaxHeight += 1
    
if maxHeight == 0 : 
    countMaxHeight = 1
print(maxHeight , countMaxHeight)