← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

type Node struct {
	children [26]*Node
	taken    bool
}

func newNode() *Node {
	return &Node{taken: false}
}

func (root *Node) insert(s string) {
	node := root
	for _, ch := range s {
		idx := ch - 'a'
		if node.children[idx] == nil {
			node.children[idx] = newNode()
		}
		node = node.children[idx]
	}
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(in, &n)
	vars := make([]string, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &vars[i])
	}
	sort.Slice(vars, func(i, j int) bool {
		if len(vars[i]) != len(vars[j]) {
			return len(vars[i]) < len(vars[j])
		}
		return vars[i] < vars[j]
	})
	root := newNode()
	for _, s := range vars {
		root.insert(s)
	}
	var sum int64
	for _, s := range vars {
		node := root
		for k := 1; k <= len(s); k++ {
			ch := s[k-1]
			idx := ch - 'a'
			node = node.children[idx]
			if !node.taken {
				node.taken = true
				sum += int64(k)
				break
			}
		}
	}
	fmt.Println(sum)
}
```