```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)
}
```