https://codeforces.com/contest/25/problem/Ehttps://codeforces.com/contest/25/problem/E
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int Next[N];
string s_in[3];
void getNext(string s, int len) {
int j = -1;
Next[0] = -1;
for (int i = 1; i < len; i++) {
while (j != -1 && s[i] != s[j + 1]) j = Next[j];
if (s[i] == s[j + 1]) j++;
Next[i] = j;
}
}
int KMP(string s, string p) {
getNext(p, p.size());
int j = -1;
for (int i = 0; i < s.size(); i++) {
while (j != -1 && s[i] != p[j + 1]) j = Next[j];
if (s[i] == p[j + 1]) j++;
if (j == p.size() - 1) return j + 1; //包含 则不存在
}
return j + 1; //除去前缀子串剩余部分的开始下标
}
int f() {
string str = "";
int left = KMP(s_in[0], s_in[1]);
str += s_in[0];
str += s_in[1].substr(left, s_in[1].size() - left);
left = KMP(str, s_in[2]);
return str.size() + s_in[2].size() - left;
}
int main() {
for (int i = 0; i < 3; i++) cin >> s_in[i];
sort(s_in, s_in + 3);
int ans = 0x3f3f3f3f;
do {
ans = min(ans, f());
} while (next_permutation(s_in, s_in + 3));
cout << ans << endl;
return 0;
}