#include <iostream>
#include <string>
using namespace std;
string p[200];
int cnt;
int nxt[10][210];
int dp[200010][210];
bool ans[200010];
int main()
{
// 输入
string tmp;
while (cin >> tmp)
{
if (tmp == ".")
break;
p[cnt] = tmp;
cnt++;
}
string s;
cin >> s;
s.insert(0, "."); // 让下标从1开始
// cout << "input is done" << endl;
for (int i = 0; i < cnt; i++)
nxt[i][0] = -1;
for (int i = 0; i < cnt; i++)
{
int t = -1;
int j = 0;
while (j <= p[i].size())
{
if (0 > t || p[i][j] == p[i][t])
{
j++;
t++;
nxt[i][j] = t;
}
else
t = nxt[i][t];
}
}
// next表构造完成
for (int i = 0; i < cnt; i++)
{
int q = 1;
int j = 0;
while (q < s.size())
{
while ((q < s.size()) && (j < 0 || j < p[i].size()))
{
if (j < 0 || s[q] == p[i][j])
{
q++;
j++;
}
else
j = nxt[i][j];
}
if (j == p[i].size())
{
dp[q - p[i].size()][i] = p[i].size();
j = nxt[i][j];
}
}
}
// 跑cnt遍kmp,标记每一个匹配位置及匹配的字符串的长度
ans[0] = 1;
for (int i = 0; i < s.size(); i++)
{
if (ans[i] == 1)
{
for (int j = 0; j < cnt; j++)
ans[i + dp[i + 1][j]] = 1;
}
}
// 计算出哪些前缀是合法的
for (int i = s.size(); i > 0; i--)
{
if (ans[i] == 1)
{
cout << i << endl;
return 0;
}
}
// 输出
cout << 0;
return 0;
}