#include
#include
using namespace std;
class IntegerSet
{
private:
int size;
int *p;
public:
IntegerSet(int n=0)
{
size = n;
p = new int[n];
}
void Set();
void Show();
IntegerSet operator+(const IntegerSet&);
IntegerSet operator-(const IntegerSet&);
~IntegerSet()
{
delete []p;
}
};
void IntegerSet::Set()
{
for(int i = 0; i < size; i++)
cin>>p[i];
sort(p, p+size);
int *q = unique(p, p+size);
size = q - p;
}
void IntegerSet::Show()
{
if(size == 0)
cout<<'empty'<<endl;
else
{
for(int i = 0; i < size; i++)
cout<<p[i]<<' ';
cout<<endl;
}
}
IntegerSet IntegerSet::operator+(const IntegerSet& S)
{
int m = size + S.size;
IntegerSet T(m);
int i = 0, j = 0, k = 0;
while(i < size && j < S.size)
{
if(p[i] == S.p[j])
T.p[k++] = p[i++];
else if(p[i] < S.p[j])
T.p[k++] = p[i++];
else
T.p[k++] = S.p[j++];
}
while(i < size)
T.p[k++] = p[i++];
while(j < S.size)
T.p[k++] = S.p[j++];
T.size = k;
return T;
}
IntegerSet IntegerSet::operator-(const IntegerSet& S)
{
IntegerSet T(size);
int i = 0, j = 0, k = 0;
while(i < size && j < S.size)
{
if(p[i] == S.p[j])
{
T.p[k++] = p[i++];
j++;
}
else if(p[i] < S.p[j])
i++;
else
j++;
}
T.size = k;
return T;
}
int main()
{
int n, m;
cin>>n;
IntegerSet A(n);
A.Set();
cin>>m;
IntegerSet B(m);
B.Set();
IntegerSet C = A + B;
C.Show();
C = A - B;
C.Show();
return 0;