#include<stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef char Status;
Status InitList(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if(!L)
return ERROR;
L->next=NULL;
return OK;
}
Status ListInsert(LinkList &L,int i,ElemType e)
{
LinkList p,s;
p=L;
int j=0;
while(p&&j<i-1)
{
j++;
p=p->next;
}
if(!p||j>i-1)
{
return ERROR;
}
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListLength(LinkList L)
{
LinkList p;
int len=0;
p=L->next;
while(p)
{
len++;
p=p->next;
}
return len;
}
Status GetElem(LinkList L,int i,ElemType &e)
{
LinkList p;
p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return ERROR;
e=p->data;
return OK;
}
Status DestroyList(LinkList &L)
{
LinkList p,temp;
p=L->next;
while(p)
{
temp=p->next;
free(p);
p=temp;
}
return OK;
}
void jiaoji(LinkList La,LinkList Lb,LinkList &Lc)
{
InitList(Lc);
LinkList pa,pb,pc,p;
pa=La->next;
pb=Lb->next;
p=pc=Lc;
while(pb!=NULL)
{
while(pa!=NULL)
{
if(pa->data==pb->data)
{
pc=(LinkList)malloc(sizeof(LNode));
pc->data=pb->data;
pc->next=NULL;
p->next=pc;
p=pc;
break;
}
pa=pa->next;
}
pb=pb->next;
pa=La->next;
}
}
int main()
{
int i,j,len;
ElemType e;
LinkList La,Lb,Lc;
int m,n;
scanf("%d%d",&m,&n);
getchar();
InitList(La);
InitList(Lb);
for(i=1; i<=m; i++)
{
scanf("%c",&e);
ListInsert(La,i,e);
}
getchar();
for(i=1; i<=n; i++)
{
scanf("%c",&e);
ListInsert(Lb,i,e);
}
jiaoji(La,Lb,Lc);
len=ListLength(Lc);
for(i=1; i<=len; i++)
{
GetElem(Lc,i,e);
printf("%c",e);
}
DestroyList(La);
DestroyList(Lb);
DestroyList(Lc);
return 0;
}