#include <stdio.h>
 
int main(){
 
    int la[200], lb[100];       // 定义存储集合A与集合B的变量
    int m, n;                   // 定义存储集合A与集合B元素数目的变量
    int i, j, iCase=0;          // 定义迭代变量i、j,iCase用来记录测试数据的组数
 
    // 读取每组测试数据的第一行,因为测试数据没有告诉几行,
    // 所以用判断是否读到了文件结尾来判断是否读取数据结束
    while(scanf("%d", &m) != EOF){
 
        // 用iCase已输出几行来判断是否需要输出一个空行
        if(iCase++){
            putchar('\n');
        }
 
        // 读入集合 A 的元素
        for(i=0;i<m;i++){
            scanf("%d", &la[i]);
        }
 
        // 读入集合 B 的元素数目和元素
        scanf("%d", &n);
        for(i=0;i<n;i++){
            scanf("%d", &lb[i]);
        }
 
        // 输出集合 A 的元素
        for(i=0;i<m;i++){
            if(i){
                putchar(' ');
            }
            printf("%d", la[i]);
        }
        putchar('\n');
 
        // 输出集合 B 的元素
        for(i=0;i<n;i++){
            if(i){
                putchar(' ');
            }
            printf("%d", lb[i]);
        }
        putchar('\n');
 
        // 依次从集合 B 中取出元素插入到集合 A 的尾部
        for(i=0;i<n;i++){
 
            // 判断集合 B 中第 i 个元素是不是在集合 A 中也有
            for(j=0;j<m;j++){
                if(lb[i] == la[j]){
                    break;
                }
            }
 
            // 如果找完集合 A 中 m 个元素仍未找到集合 B 中的第 i 个元素,
            // 说明在集合 A 中不存在该元素,则将其插入到尾部。同时集合 A 的总数目加 1。
            if(j >= m){
                la[m] = lb[i];
                m++;
            }
 
            // 将集合 B 中的元素插入到集合 A 的尾部后,将集合 A 的所有元素输出
            for(j=0;j<m;j++){
                if(j){
                    putchar(' ');
                }
                printf("%d", la[j]);
            }
            putchar('\n');
        }
    }
 
    return 0;
}
/**************************************************************
	Problem: 2135
	User: admin
	Language: C
	Result: Accepted
	Time:11 ms
	Memory:1144 kb
****************************************************************/