#include<bits/stdc++.h>
using namespace std;
int n,m,l,tot;
char a[10000005];
int ch[10000005][26],fail[10000005],u,ke[1000005];
int d[10000005];
char t[10000005],s[10000005];
bool b[10000005];
stack<int> q;
queue<int> p;
int main(){
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
scanf("%s",s+1);
n=strlen(s+1);
int pp;
cin>>pp;
while(pp--){
scanf("%s",t+1);
m=strlen(t+1);
u=0;
for(int i=1;i<=m;i++){
if(!ch[u][t[i]-'a'])ch[u][t[i]-'a']=++tot;
d[ch[u][t[i]-'a']]=d[u]+1;
u=ch[u][t[i]-'a'];
}
b[u]=1;
}
for(int i=0;i<26;i++)if(ch[0][i])p.push(ch[0][i]);
while(!p.empty()){
u=p.front();
p.pop();
for(int i=0;i<26;i++){
if(ch[u][i]){
fail[ch[u][i]]=ch[fail[u]][i];
p.push(ch[u][i]);
}
else ch[u][i]=ch[fail[u]][i];
}
}
u=0;
for(int i=1;i<=n;i++){
if(!q.empty()){
u=ke[q.top()];
}
q.push(i);
u=ch[u][s[i]-'a'];
ke[i]=u;
if(b[u])for(int j=1;j<=d[u];j++)q.pop();
}
while(!q.empty()){
a[++l]=s[q.top()];
q.pop();
}
for(int i=l;i>=1;i--)cout<<a[i];
return 0;
}
WA记录