#include<stdio.h>
#include<string.h>
#define N 100
struct Node{
   struct Node *lchild;
   struct Node *rchild;
   char c;
}Tree[N];

int loc=0;

Node *create(){//静态分配一个结点
    Tree[loc].lchild=Tree[loc].rchild=NULL;
	return &Tree[loc++];
}

char str1[N],str2[N];

Node *build(int s1,int e1,int s2,int e2){//分别代表两个字符串的起始下标和结束下标
     Node *T=create();
	 T->c=str1[s1];
	 int i;//记录串二中终止下标
	 char temp=str1[s1];
	 for(i=s2;i<=e2;i++){
	    if(str2[i]==temp)break;
	 }
	 if(i==e2){//如果该结点右边不再有树
	   char temp1=str1[s1+1];
	   for(i=s2;i<e2;i++){
	      if(temp1==str2[i])break;//*************向前探寻一个结点
	   }
       if(i>s2&&i<e2-1){//如果在左右都有树
	      T->lchild=build(s1+1,s1+i-s2+1,s2,i);
		  T->rchild=build(s1+i-s2+2,e1,i+1,e2-1);
	   }
	   if(i==e2-1)T->lchild=build(s1+1,e1,s2,e2-1);//如果只有右边有树
	   if(i==s2)T->rchild=build(s1+1,e1,s2,e2-1);//如果只有左边有树
	 }
	 return T;
}
FILE *fp1,*fp2;
void  inOrder(Node *T){//中序遍历
     if(T->lchild)inOrder(T->lchild);
     fprintf(fp2,"%c",T->c);
	 if(T->rchild)inOrder(T->rchild);
}
int main(){
	fp1=fopen("4.in","r");
	fp2=fopen("4.out","w");
	fscanf(fp1,"%s",str1);
	fscanf(fp1,"%s",str2);
	int len1=strlen(str1);
	int len2=strlen(str2);
	Node *T=build(0,len1-1,0,len2-1);
    inOrder(T);
return 0;
}