← Home
package main

import (
	"fmt"
	"io"
	"os"
)

type State struct {
	len  int
	link int
	next [26]int
	sz   int
}

func main() {
	input, _ := io.ReadAll(os.Stdin)
	var pos int

	readNextString := func() string {
		for pos < len(input) && input[pos] <= ' ' {
			pos++
		}
		if pos >= len(input) {
			return ""
		}
		start := pos
		for pos < len(input) && input[pos] > ' ' {
			pos++
		}
		return string(input[start:pos])
	}

	stStr := readNextString()
	if stStr == "" {
		return
	}
	var T int
	for i := 0; i < len(stStr); i++ {
		T = T*10 + int(stStr[i]-'0')
	}

	st := make([]State, 0, 200005)
	c := make([]int, 100005)
	order := make([]int, 200005)

	for t := 0; t < T; t++ {
		s := readNextString()
		if s == "" {
			break
		}
		n := len(s)

		st = st[:1]
		st[0] = State{link: -1}
		sz := 1
		last := 0

		for i := 0; i < n; i++ {
			char := s[i] - 'a'
			cur := sz
			sz++
			st = append(st, State{len: st[last].len + 1, sz: 1, link: -1})

			p := last
			for p != -1 && st[p].next[char] == 0 {
				st[p].next[char] = cur
				p = st[p].link
			}

			if p == -1 {
				st[cur].link = 0
			} else {
				q := st[p].next[char]
				if st[p].len+1 == st[q].len {
					st[cur].link = q
				} else {
					clone := sz
					sz++
					st = append(st, State{
						len:  st[p].len + 1,
						next: st[q].next,
						link: st[q].link,
						sz:   0,
					})
					for p != -1 && st[p].next[char] == q {
						st[p].next[char] = clone
						p = st[p].link
					}
					st[q].link = clone
					st[cur].link = clone
				}
			}
			last = cur
		}

		for i := 0; i <= n; i++ {
			c[i] = 0
		}
		for i := 0; i < sz; i++ {
			c[st[i].len]++
		}
		for i := 1; i <= n; i++ {
			c[i] += c[i-1]
		}
		for i := 0; i < sz; i++ {
			c[st[i].len]--
			order[c[st[i].len]] = i
		}

		for i := sz - 1; i > 0; i-- {
			u := order[i]
			if st[u].link != -1 {
				st[st[u].link].sz += st[u].sz
			}
		}

		var ans int64 = 0
		for i := 1; i < sz; i++ {
			u := order[i]
			ans += int64(st[u].len-st[st[u].link].len) * int64(st[u].sz) * int64(st[u].sz)
		}

		fmt.Println(ans)
	}
}