#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    char data;
    struct Node*next; 
}*linklist;
void readdata(linklist head)
{ 
	linklist p;
    char a;
    scanf("%c",&a);
    while(a!='\n'&&a>='a'&&a<='z')
	{ 
        p=(linklist)malloc(sizeof(struct Node));
        p->data=a;
        p->next=head->next;
        head->next=p;
        scanf("%c",&a);
	}
}
void pop(linklist head)
{ 
	linklist p;
    p=head->next;
    while(p!=NULL)
	{ 
        printf("%c",p->data);
        p=p->next;
	}
    printf("\n");
}
void Insection(linklist head1,linklist head2,linklist head3) 
{ 
    linklist p1,p2,p3;
    p1=head1->next;
    while(p1!=NULL)
	{ 
        p2=head2->next;
        while((p2!=NULL)&&(p2->data!=p1->data))
			p2=p2->next;
		if((p2!=NULL)&&(p2->data==p1->data))
		{ 
			p3=(linklist)malloc(sizeof(struct Node));
            p3->data=p1->data;
            p3->next=head3->next;
            head3->next=p3; 
		}
        p1=p1->next; 
	} 
}
void Deprive(linklist head1,linklist head2,linklist head3)
{ 
	linklist p1,p2,p3;
    p1=head1->next;
    while(p1!=NULL)
	{ 
		p2=head2->next;
		while((p2!=NULL)&&(p2->data!=p1->data))
			p2=p2->next;
		if(p2==NULL)
		{ 
            p3=(linklist)malloc(sizeof(struct Node));
            p3->data=p1->data;
            p3->next=head3->next;
            head3->next=p3;
		}
        p1=p1->next;
	}
}
void Merge(linklist head1,linklist head2,linklist head3)
{ 
	linklist p1,p2,p3;
    p1=head1->next;
    p2=head2->next;
    Deprive(head1,head2,head3);
	p3=head3->next;
	
	
}
void main(linklist head1,linklist head2,linklist head3)
{ 
    int x;
    printf("输入完成后请按回车键\n");
    head1=(linklist)malloc(sizeof(struct Node)); 
    head1->next=NULL;
    head2=(linklist)malloc(sizeof(struct Node));
    head2->next=NULL;
    head3=(linklist)malloc(sizeof(struct Node));
    head3->next=NULL;
    printf("请输入集合一\n");
    readdata(head1); 
    printf("请输入集合二 \n");
    readdata(head2);
    A:printf("1.交集 2.并集 3.差集 4.退出\n");
   do{ 
	   printf("请选择序号\n");
	   scanf("%d",&x);
	   switch(x)
	   { 
	   case 1:
		   printf("两个集合的交集是\n");
		   Insection(head1,head2,head3);
           pop(head3);
           head3->next=NULL;
		   break;
       case 2:
		   printf("两个集合的并集是 \n");
           Merge(head1,head2,head3);
           pop(head3);
           head3->next=NULL;
           break;
       case 3:
           printf("两个集合的差集是\n");
           Deprive(head1,head2,head3);
           pop(head3);
           head3->next=NULL;
           break;
       case 4: break;
       default:goto A; 
	   }
   }while(x!=4);
}