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>.
def solve():
    s, ans1, ans2, rec = read_str(), 0, 0, collections.defaultdict(list)

    n = len(s)
    pre = [0] * (n + 1)
    for i, c in enumerate(s):
        if c == '(':
            pre[i + 1] = pre[i] + 1
            rec[pre[i]].append(i)
        else:
            pre[i + 1] = pre[i] - 1

    left, st = [-1] * (n + 1), []
    for i in range(n, -1, -1):
        while st and st[-1][0] > pre[i]:
            left[st.pop()[1]] = i
        st.append((pre[i], i))

    for i in range(1, n):
        if s[i] == ')':
            i += 1
            idx = bisect.bisect_right(rec[pre[i]], left[i])
            if idx < len(rec[pre[i]]):
                tmp = i - rec[pre[i]][idx]
                if tmp > ans1:
                    ans1 = tmp
                    ans2 = 1
                elif tmp == ans1:
                    ans2 += 1

    if ans1:
        print(ans1, ans2)
    else:
        print(0, 1)


solve()