```go
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReaderSize(os.Stdin, 2*1024*1024)
line, _ := reader.ReadString('\n')
s := strings.TrimSpace(line)
n := len(s)
if n == 0 {
fmt.Println("0 1")
return
}
dp := make([]int, n)
maxLen := 0
count := 1
for i := 1; i < n; i++ {
if s[i] == ')' {
pre := i - 1 - dp[i-1]
if pre >= 0 && s[pre] == '(' {
dp[i] = dp[i-1] + 2
if pre-1 >= 0 {
dp[i] += dp[pre-1]
}
if dp[i] > maxLen {
maxLen = dp[i]
count = 1
} else if dp[i] == maxLen {
count++
}
}
}
}
fmt.Println(maxLen, count)
}
```