def is_mo(word1, word2):
len1 = len(word1)
len2 = len(word2)
num = min(len1, len2) - 1
for k in range(1, num + 1):
for i in range(len1 - 1, -1, -1):
for j in range(len2):
if word1[len1 - k:] == word2[:k]:
ind2 = k
return ind2
return -1
def dfs():
for j in range(n):
if use[j] <= 1:
global dragon
if is_mo(dragon, words[j]) != -1:
temp_str = words[j]
index2 = is_mo(dragon, words[j])
dragon += temp_str[index2:]
use[j] += 1
dfs()
use[j] -= 1
dragon = dragon.rstrip(temp_str[index2:])
global max_len
if len(dragon) > max_len:
max_len = len(dragon)
return True
n = int(input())
words = []
dragon = ''
use = [0] * (n)
max_len = 0
for _ in range(n):
str1 = input()
words.append(str1)
head = input()
for word in words:
if head == word[0]:
ind = words.index(word)
use[ind] += 1
dragon += word
dfs()
dragon = ''
print(max_len)