#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int coe;//系数
int index;//指数
struct Node *next;
}LNode,*LinkList;
void create(LinkList &L,int n){
int a,b;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
int i;
for(i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d %d",&a,&b);
p->coe=a;
p->index=b;
q->next=p;
q=p;
p->next=NULL;
}
}
void addition(LinkList &A,LinkList &B,LinkList &C){
A=A->next;
B=B->next;
LinkList p,q=C;
while(A&&B){
if(A->index>B->index){
p=(LinkList)malloc(sizeof(LNode));
p->coe=B->coe;
p->index=B->index;
q->next=p;
p->next=NULL;
q=p;
B=B->next;
}
else if(A->index<B->index){
p=(LinkList)malloc(sizeof(LNode));
p->coe=A->coe;
p->index=A->index;
q->next=p;
p->next=NULL;
q=p;
A=A->next;
}
else{
p=(LinkList)malloc(sizeof(LNode));
p->coe=A->coe+B->coe;
if(p->coe){
p->index=A->index;
q->next=p;
p->next=NULL;
q=p;
}
else free(p);
A=A->next;
B=B->next;
}
}
while(A){
p=(LinkList)malloc(sizeof(LNode));
p->coe=A->coe;
p->index=A->index;
q->next=p;
p->next=NULL;
q=p;
A=A->next;
}
while(B){
p=(LinkList)malloc(sizeof(LNode));
p->coe=B->coe;
p->index=B->index;
q->next=p;
p->next=NULL;
q=p;
B=B->next;
}
free(A);
free(B);
}
void print(LinkList &L){
L=L->next;
while(L){
printf("%dx%d\n",L->coe,L->index);
L=L->next;
}
}
int main(){
int n;
scanf("%d",&n);
LinkList A,B,C;
create(A,n);
scanf("%d",&n);
create(B,n);
create(C,0);
addition(A,B,C);
print(C);
}