← Home
package main

import (
	"io"
	"os"
	"strconv"
)

type FastScanner struct {
	data []byte
	idx  int
}

func (fs *FastScanner) nextInt() int {
	for fs.idx < len(fs.data) && fs.data[fs.idx] <= ' ' {
		fs.idx++
	}
	val := 0
	for fs.idx < len(fs.data) && fs.data[fs.idx] > ' ' {
		val = val*10 + int(fs.data[fs.idx]-'0')
		fs.idx++
	}
	return val
}

func (fs *FastScanner) nextBytes() []byte {
	for fs.idx < len(fs.data) && fs.data[fs.idx] <= ' ' {
		fs.idx++
	}
	start := fs.idx
	for fs.idx < len(fs.data) && fs.data[fs.idx] > ' ' {
		fs.idx++
	}
	return fs.data[start:fs.idx]
}

func zFunction(s []byte) []int {
	n := len(s)
	z := make([]int, n)
	l, r := 0, 0
	for i := 1; i < n; i++ {
		if i <= r {
			if z[i-l] < r-i+1 {
				z[i] = z[i-l]
			} else {
				z[i] = r - i + 1
			}
		}
		for i+z[i] < n && s[z[i]] == s[i+z[i]] {
			z[i]++
		}
		if i+z[i]-1 > r {
			l = i
			r = i + z[i] - 1
		}
	}
	return z
}

func pairCount(x, y, b int) int64 {
	if b >= x+y {
		return int64(x+1) * int64(y+1)
	}
	p1 := b - y
	if p1 > x {
		p1 = x
	}
	var res int64
	if p1 >= 0 {
		res += int64(p1+1) * int64(y+1)
	} else {
		p1 = -1
	}
	l := p1 + 1
	if l < 0 {
		l = 0
	}
	r := x
	if b < r {
		r = b
	}
	if l <= r {
		cnt := int64(r - l + 1)
		sumP := int64(l+r) * cnt / 2
		res += cnt*int64(b+1) - sumP
	}
	return res
}

func solve(s []byte) int64 {
	n := len(s)
	core := make([]byte, 0, n)
	c := make([]int, 1, n+1)

	i := 0
	for i < n && s[i] == 'a' {
		i++
	}
	c[0] = i

	for i < n {
		core = append(core, s[i])
		i++
		cnt := 0
		for i < n && s[i] == 'a' {
			cnt++
			i++
		}
		c = append(c, cnt)
	}

	m := len(core)
	if m == 0 {
		return int64(n - 1)
	}

	z := zFunction(core)
	var ans int64

	process := func(d int) {
		if d == m {
			ans += int64(c[0]+1) * int64(c[m]+1)
			return
		}
		if z[d] < m-d {
			return
		}
		b := int(^uint(0) >> 1)
		for i := d; i < m; i += d {
			if c[i] < b {
				b = c[i]
			}
		}
		ok := true
		for r := 1; r < d && ok; r++ {
			v := c[r]
			for i := r + d; i < m; i += d {
				if c[i] != v {
					ok = false
					break
				}
			}
		}
		if ok {
			ans += pairCount(c[0], c[m], b)
		}
	}

	for d := 1; d*d <= m; d++ {
		if m%d == 0 {
			process(d)
			if d*d != m {
				process(m / d)
			}
		}
	}

	return ans
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	fs := FastScanner{data: data}
	t := fs.nextInt()
	out := make([]byte, 0, t*20)
	for ; t > 0; t-- {
		s := fs.nextBytes()
		ans := solve(s)
		out = strconv.AppendInt(out, ans, 10)
		out = append(out, '\n')
	}
	_, _ = os.Stdout.Write(out)
}