//题目1519:合并两个排序的链表
#include <stdio.h>
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;
void Add(LinkList &list,int value)
{
Node *node=new Node();
node->next=NULL;
node->data=value;
if(list==NULL)
{
list=node;
}
else
{
LinkList p=list;
while((p->next)!=NULL)
{
p=p->next;
}
p->next=node;
}
}
void Union(LinkList la,LinkList lb,LinkList &lc)
{
if(la==NULL)
{
lc=lb;
return ;
}
if(lb==NULL)
{
lc=la;
return ;
}
Node *p;
if(la->data > lb->data)
{
lc=p=lb;
lb=lb->next;
}
else//(la->data < lb->data)
{
lc=p=la;
la=la->next;
}
while(la && lb)
{
if(la->data <= lb->data)
{
p->next=la;
la=la->next;
}
else
{
p->next=lb;
lb=lb->next;
}
p=p->next;
}
p->next=(la?la:lb);
}
void prit(LinkList &list)
{
LinkList p=list;
while(p->next!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("%d\n",p->data);
// printf("\n");
}
int main()
{
int n,m,x;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0 && m==0)
{
printf("NULL\n");
continue;
}
LinkList first=NULL,second=NULL,lc=NULL;
while(n--)
{
scanf("%d",&x);
Add(first,x);
}
// prit(first);
while(m--)
{
scanf("%d",&x);
Add(second,x);
}
// prit(second);
Union(first,second,lc);
prit(lc);
}
return 0;
}