#include <stdio.h>
#define LEN 2500
int n,m;
long long arr[LEN][2] = {0};/*0->存储数据,1->存储加点*/
void sort_q(int x,int y,long long tmp[LEN][2])
{
int i = x , j = y;
long long k[2];
k[0] = tmp[x][0];
k[1] = tmp[x][1];
if (i < j)
{
while (i < j)
{
while (i < j && k[0] < tmp[j][0])
j --;
if (i < j)
{
tmp[i][0] = tmp[j][0];
tmp[i][1] = tmp[j][1];
i ++;
}
while (i < j && k[0] > tmp[i][0])
i ++;
if (i < j)
{
tmp[j][0] = tmp[i][0];
tmp[j][1] = tmp[i][1];
j --;
}
}
tmp[i][0] = k[0];
tmp[i][1] = k[1];
sort_q(x,i-1,tmp);
sort_q(i+1,y,tmp);
}
return ;
}
void init(void)
{
int flag;
int i,j;
long long k;
scanf("%d",&n);
for (i = 1 ; i <= n ; i ++)
{
scanf("%lld",&k);
arr[i][0] = k;
arr[i][1] += 1;
}
scanf("%d",&m);
for (i = n+1 ; i <= n+m ; i ++)
{
scanf("%lld",&k);
flag = 1;
for (j = 1 ; j <= n ; j ++)
{
if (arr[j][0] == k)
{
arr[j][1] += 2;
flag = 0;
break;
}
}
if (flag)
{
arr[i][0] = k;
arr[i][1] += 2;
}
}
sort_q(1,i,arr); /*快排*/
return ;
}
void print()
{
int i;
for (i = 1 ; i <= LEN ; i ++)
{
if (arr[i][1] >= 3)
{
printf("%lld ",arr[i][0]);/*输出AB交集*/
}
}
printf("\n");
for (i = 1 ; i <= LEN ; i ++)
{
if (arr[i][1] != 0)
{
printf("%lld ",arr[i][0]);/*输出AB并集*/
}
}
printf("\n");
for (i = 1 ; i <= LEN ; i ++)
{
if (arr[i][1] == 1)
{
printf("%lld ",arr[i][0]);/*输出B在A中的余集*/
}
}
return ;
}
int main(void)
{
init();
print();
return 0;
}
/**************************************************************
Problem: 1852
User: admin
Language: C
Result: Accepted
Time:79 ms
Memory:1184 kb
****************************************************************/