#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<string>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<stack>
#include<cmath>
#include<map>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
#define INF 1000000000
#define bug1 cout<<"bug1"<<endl;
#define bug2 cout<<"bug2"<<endl;
#define bug3 cout<<"bug3"<<endl;
using namespace std;
const int maxn=5*1e6+5;
char s[maxn];
char t[maxn];
char ans[maxn];
int nxt[maxn];
int pre[maxn];
void getfail(){
nxt[0]=-1;
int k=-1;
int j=0;
int len=strlen(s);
while(j<len){
if(k==-1||s[k]==s[j]){
k++;j++;
nxt[j]=k;
}
else k=nxt[k];
}
nxt[0]=0;
}
void InitP(char *B){
nxt[0]=nxt[1]=0;
for(int i=2,j=0;B[i];++i){
while(j>0&&B[j]!=B[i-1])j=nxt[j];
if(B[j]==B[i-1])++j;
nxt[i]=j;
}
}
int main(){
while(~scanf(" %s%s",t,s)){
memset(ans,0,sizeof(ans));
memset(pre,0,sizeof(pre));
//getfail();
InitP(t);
int len=strlen(s);
int lent=strlen(t);
for(int i=0,j=0,k=0;i<len;++i,++k){
ans[k]=s[i];
while(j>0&&s[i]!=t[j])j=nxt[j];
if(s[i]==t[j])++j;
if(j==lent){
k-=lent;
//j=j-(lent+1);
j=pre[k];
}
ans[k+1]=0;
pre[k]=j;//这个pre 能够... 还是不懂。。。
}
puts(ans);
}
}