Problem:
Score : 500 points

Problem Statement

Snuke has a string s.
From this string, Anuke, Bnuke, and Cnuke obtained strings a, b, and c, respectively, as follows:

Choose a non-empty (contiguous) substring of s (possibly s itself). Then, replace some characters (possibly all or none) in it with ?s.

For example, if s is mississippi, we can choose the substring ssissip and replace its 1-st and 3-rd characters with ? to obtain ?s?ssip.

You are given the strings a, b, and c.
Find the minimum possible length of s.

Constraints

1 \leq |a|, |b|, |c| \leq 2000

a, b, and c consists of lowercase English letters and ?s.

Input

Input is given from Standard Input in the following format:

a
b
c

Output

Print the minimum possible length of s.

Sample Input 1

a?c
der
cod

Sample Output 1

7

For example, s could be atcoder.

Sample Input 2

atcoder
atcoder
???????

Sample Output 2

7

a, b, and c may not be distinct.

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)

a = gets.chomp.split
b = gets.chomp.split
c = gets.chomp.split

def k(arr1, arr2)
  arr = []
  arr1, arr2 = arr2, arr1 if arr2.size > arr1.size # 1の方を長くする
  s1 = arr1.size
  s2 = arr2.size
  s2.times do
    arr1.unshift(nil)
    arr1.push(nil)
  end
  arr1.size.times do |i|
    ar1 = arr1.dup
    ar2 = arr2.dup
    i.times do |t|
      ar2.unshift(nil)
    end
    tmp = []
    flag = false
    arr1.size.times do |u|
      if ar1[u] == '?'
        tmp.push(ar2[u])
      elsif ar2[u] == '?'
        tmp.push(ar1[u])
      elsif ar1[u] == ar2[u]
        tmp.push(ar1[u])
      else
        flag = true
        break
      end
    end
    next if flag
    tmp.compact!
    arr = tmp if arr.empty? || tmp.size < arr.size
  end
  arr
end

p k(k(a,b),c).size