← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func computePi(s string) []int {
	pi := make([]int, len(s))
	for i := 1; i < len(s); i++ {
		j := pi[i-1]
		for j > 0 && s[i] != s[j] {
			j = pi[j-1]
		}
		if s[i] == s[j] {
			j++
		}
		pi[i] = j
	}
	return pi
}

func getOverlap(s1, s2 string) int {
	if len(s1) > len(s2) {
		s1 = s1[len(s1)-len(s2):]
	}
	combined := s2 + "#" + s1
	pi := computePi(combined)
	return pi[len(combined)-1]
}

func merge(s1, s2 string) string {
	if strings.Contains(s1, s2) {
		return s1
	}
	if strings.Contains(s2, s1) {
		return s2
	}
	ov := getOverlap(s1, s2)
	return s1 + s2[ov:]
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Buffer(make([]byte, 1024*1024), 1024*1024)
	var s [3]string
	for i := 0; i < 3; i++ {
		if scanner.Scan() {
			s[i] = scanner.Text()
		}
	}

	ans := -1

	permutations := [][]int{
		{0, 1, 2},
		{0, 2, 1},
		{1, 0, 2},
		{1, 2, 0},
		{2, 0, 1},
		{2, 1, 0},
	}

	for _, p := range permutations {
		res := merge(merge(s[p[0]], s[p[1]]), s[p[2]])
		if ans == -1 || len(res) < ans {
			ans = len(res)
		}
	}

	fmt.Println(ans)
}
```