#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int id;
int score;
struct LNode *next;
}LNode,*LinkList;
void createLink(LinkList *L,int n){
*L=(LNode*)malloc(sizeof(LNode));
LNode *s,*r=*L;
for(int i=1;i<=n;i++){
s=(LNode*)malloc(sizeof(LNode));
scanf("%d %d",&s->id,&s->score);
r->next=s;
r=s;
}
r->next=NULL;
}
void DeleteById(LinkList L, int id) {
LNode *p = L;
while (p->next != NULL && p->next->id != id) {
p = p->next;
}
if (p != NULL && p->next != NULL) {
LNode *q = p->next;
p->next = q->next;
free(q);
}
}
void AdeleteCommonB(LinkList La,LinkList Lb){
LNode *p=La->next;
/*标志位很重要,我卡这里半天,主要是删除之后表的结果会发生变化,所以要重新遍历,当然软删除更简单,令id=0即可,看具体需求吧*/
while(p!=NULL){
int flag=1;
LNode *q=Lb->next;
while(q!=NULL){
if(p->id==q->id){
flag=0;
DeleteById(La,p->id);
break;
}
q=q->next;
}
if(flag){
p=p->next;
}else{
p=La->next;
}
}
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
LinkList La,Lb;
createLink(&La,n);
createLink(&Lb,m);
AdeleteCommonB(La, Lb);
LNode *p=La->next;
int k=0;
while(p!=NULL){
k++;
p=p->next;
}
printf("%d\n",k);
p=La->next;
while(p!=NULL){
printf("%d %d\n",p->id,p->score);
p=p->next;
}
return 0;
}