```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Buffer(make([]byte, 0, 256*1024), 256*1024)
scanner.Scan()
var t int
fmt.Sscan(scanner.Text(), &t)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
for ; t > 0; t-- {
if !scanner.Scan() {
break
}
s := scanner.Text()
n := len(s)
p := make([]int, n+1)
pos := make([][]int, n+2)
pos[0] = append(pos[0], 0)
for i := 1; i <= n; i++ {
if s[i-1] == '(' {
p[i] = p[i-1] + 1
} else {
p[i] = p[i-1] - 1
}
pos[p[i]] = append(pos[p[i]], i)
}
var ans int64 = 0
for i := 0; i < n; i++ {
k := p[i]
target := 2*k + 1
R := n + 1
if target < len(pos) && len(pos[target]) > 0 {
listTarget := pos[target]
idx := sort.Search(len(listTarget), func(x int) bool { return listTarget[x] > i })
if idx < len(listTarget) {
R = listTarget[idx]
}
}
listK := pos[k]
left := sort.Search(len(listK), func(x int) bool { return listK[x] > i })
right := sort.Search(len(listK), func(x int) bool { return listK[x] >= R })
ans += int64(right - left)
}
fmt.Fprintln(out, ans)
}
}
```