rt
code:
#include<bits/stdc++.h>
using namespace std;
const int P=205,N=2e5+5;
int len,nxt[N],jl[P][N],ans;
bool dp[N];
char ch;
string str[N],s,ss;
void getnext (int x) {
int lenstr=str[x].size();
nxt[0]=nxt[1]=0;
for(int i=1,j=0;i<lenstr;i++) {
while(j&&str[x][i]!=str[x][j]) {
j=nxt[j];
}
if(str[x][i]==str[x][j]) j++;
nxt[i+1]=j;
}
}
void kmp () {
int lens=s.size();
for(int k=1;k<=len;k++) {
int lenstr=str[k].size();
getnext(k);
int j=0;
for(int i=0;i<lens;i++) {
while(j&&s[i]!=str[k][j]) {
j=nxt[j];
}
if(s[i]==str[k][j]) {
j++;
}
if(j==lenstr) {
jl[k][i-j+2]=1;
}
}
}
}
int main () {
// freopen("shell.in","r",stdin);
// freopen("shell.out","w",stdout);
len=1;
while(ch=getchar()) {
if(ch==' '||ch=='\n'||ch=='\r') {
len++;continue;
}
if(ch=='.') break;
str[len]+=ch;
}
while(cin>>ss) {
s+=ss;
}
kmp();
dp[0]=1;
for(int i=1;i<=s.size();i++) {
for(int j=1;j<=len;j++) {
if(i-str[j].size()<0) continue;
if(jl[j][i-str[j].size()+1]==1) {
dp[i]=dp[i]||dp[i-str[j].size()];
}
}
if(dp[i]==1) {
ans=i;
}
}cout<<ans;
return 0;
}