using namespace std;
struct node{
int vis[26];
int end;
int fail;
};
int cnt;
int pd[100010];
node ac[100010];
void insert(string s){
int p=0;
int len=s.size();
for(int i=0;i<len;i++){
int c=s[i]-'A';
if(!ac[p].vis[c]){
ac[p].vis[c]=++cnt;
}
p=ac[p].vis[c];
}
ac[p].end=len;
}
void create(){
queue<int>q;
for(int i=0;i<26;i++){
if(ac[0].vis[i]){
q.push(ac[0].vis[i]);
ac[ac[0].vis[i]].fail=0;
}
}
while(!q.empty()){
int p=q.front();
q.pop();
for(int i=0;i<26;i++){
if(ac[p].vis[i]){
ac[ac[p].vis[i]].fail=ac[ac[p].fail].vis[i];
q.push(ac[p].vis[i]);
}
else {
ac[p].vis[i]=ac[ac[p].fail].vis[i];
}
}
}
}
void ask(string s){
pd[0]=1;
int p=0;
int len=s.size();
// cout<<len<<endl;
for(int i=1;i<=len-1;i++){
int c=s[i]-'A';
p=ac[p].vis[c];
for(int t=p;t&&!pd[i];t=ac[t].fail){
// cout<<i<<' '<<i-ac[t].end<<endl;
if(ac[t].end)pd[i]+=pd[i-ac[t].end];
}
}
for(int i=len-1;i>=0;i--){
if(pd[i]){
cout<<i<<endl;
return ;
}
}
}
string t;
int main(){
string s;
while(114514){
cin>>s;
if(s==".")break;
//s=' '+s;
insert(s);
}
while(cin>>s){
t+=s;
}
t=' '+t;
create();
ask(t);
}