/*
 * 游戏之作,原帖见http://bbs.bccn.net/thread-457592-1-1.html
 */

#include <stdio.h>
#include <stdlib.h>

typedef struct LinkNodeTag
{
    unsigned data;
    struct LinkNodeTag *next;
}LinkNode, *LinkList;

/*
 * 打印链表
 */
void PrintLink(LinkList l)
{
    if (l == NULL)
    {
        printf("\n");
        return;
    }

    printf("%5d", l->data);
    PrintLink(l->next);
}

/*
 * 创建无头节点链表
 */
LinkList InitLink(int n)
{
    if (n == 0)  return NULL;

    LinkList s = malloc(sizeof(LinkNode));
    scanf("%d", &s->data);
    s->next = InitLink(n - 1);
    return s;
}

/*
 * 销毁链表
 */
void DestroyLink(LinkList l)
{
    if (l != NULL)  DestroyLink(l->next);
    free(l);
}

/*
 * 链表逆序
 */
LinkList ReverseLink(LinkList l)
{
    LinkList p, q, s;

    p = l;
    if (p == NULL)  return NULL;
    q = p->next;
    if (q == NULL)  return p;

    s = ReverseLink(q);

    p->next = NULL;
    q->next = p;

    return s;
}

/*
 * 链表合并
 */
LinkList CombineLink(LinkList a, LinkList b)
{
    if (a == NULL)  return b;
    if (b == NULL)  return a;

    if (a->data < b->data)
    {
        a->next = CombineLink(a->next, b);
        return a;
    }
    else
    {
        b->next = CombineLink(a, b->next);
        return b;
    }
}

/*
 * 主函数
 */
int main(int argc, char *argv[])
{
    int a_len, b_len;

    scanf("%d%d", &a_len, &b_len);
    LinkList a = InitLink(a_len);
    LinkList b = InitLink(b_len);

    PrintLink(a);
    PrintLink(b);

    LinkList c = CombineLink(a, b);
    PrintLink(c);

    c = ReverseLink(c);
    PrintLink(c);

    DestroyLink(c);

    return 0;
}