#include <iostream>
using namespace std;
typedef struct Node{
int data;
Node* next;
}node,*LinkList;
int main() {
LinkList l1 = new node,l2 = new node,l3 = new node;
l1->next = NULL;
l2->next = NULL;
l3->next = NULL;
int x;
node* p = l1;
while((cin>>x)&&x!=-1){
node* s = new node;
s->data = x;
s->next = NULL;
p->next = s;
p = p->next;
}
p = l2;
while((cin>>x)&&x!=-1){
node* s = new node;
s->data = x;
s->next = NULL;
p->next = s;
p = p->next;
}
p = l1->next;
node* p2 = l2->next;
node* p3 = l3;
if(p==NULL){
l3 = l2->next;
}else if(p2==NULL){
l3 = l1->next;
}else{
node* q = p->next;
while(p&&q){//解决l1链表的相同元素问题,对重复项进行预先处理
if(p->data == q->data){
q = p->next;
p->next = q->next;
q = q->next;
}else{
p = p->next;
q = q->next;
}
}
q = p2->next;
while(p2&&q){//解决l2链表的相同元素问题
if(p2->data == q->data){
q = p2->next;
p2->next = q->next;
q = q->next;
}else{
p2 = p2->next;
q = q->next;
}
}
p = l1->next;
p2 = l2->next;
while(p!=NULL&&p2!=NULL){
if(p->data == p3->data)//排除l3和l1有重复的元素
p = p->next;
if(p2->data == p3->data)//排除l3和l2有重复的元素
p2 = p2->next;
if((p->data)<=(p2->data)){
p3->next = p;
p3 = p;
p = p->next;
}else{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
if(p){
if(p->data!=p3->data)
while (p) {
p3->next = p;
p = p->next;
}
else{
p = p->next;
while (p) {
p3->next = p;
p = p->next;
}
}
}
// p3->next = p;
else if(p2){
if(p2->data!=p3->data)
while (p2) {
p3->next = p2;
p2 = p2->next;
}
else{
p2 = p2->next;
while (p2) {
p3->next = p2;
p2 = p2->next;
}
}
}
}
p3 = l3;
p3 = p3->next;
if(p3==NULL){
cout<<"NULL";
}else{
while(p3!=NULL){
if(p3->next == NULL)
cout<<p3->data;
else
cout<<p3->data<<" ";
p3 = p3->next;
}
}
return 0;
}