#include<iostream>
using namespace std;
typedef int ElemType;
typedef struct PNode {
 int coef;//系数
 int expn;//指数
 struct PNode* next;
}*PolyList,PNode;
void CreatPolyn(PolyList& L, int n);//尾插法建链表
void AddPolyn(PolyList& LC, PolyList& LA, PolyList& LB);//多项式相加
void MulltiPolyn(PolyList& LC, PolyList LA, PolyList LB);//多项式相乘
void PrintPolyn(PolyList P);//输出结果
int main()
{
 int n,m;
 cin >> n;
 PolyList L1,L2,P1,P2;
 CreatPolyn(P1, n);//创建链表
 cin >> m;
 CreatPolyn(P2, m);//创建链表
 MulltiPolyn(L1, P1, P2);//多项式相乘
 PrintPolyn(L1);
 cout << endl;
 AddPolyn(L2,P1, P2);//多项式相加
 PrintPolyn(L2);
 return 0;
}
void CreatPolyn(PolyList& L, int n)//尾插法建链表
{
 int x, y;
 PolyList p, t;
 L = new PNode;
 L->next = NULL;
 t = L;
 for (int i = 1; i <= n; i++){
  cin >> x >> y;
  if (x) {//除去系数为零的情况
   p = new PNode;
   p->coef = x; p->expn = y;
   t->next = p;
   t = p;
  }
 }
 t->next = NULL;
}
void PrintPolyn(PolyList P)//输出结果
{
 if (!P->next) cout << "0 0";//链表为空
 P = P->next;
 while (P){
   cout << P->coef << " " << P->expn;
            P = P->next;
         if (P != NULL) cout<<" "; //只有在指针域不为NULL时,才输出空格间隔开每个多项式。即在多项式末位没有空格 
 }
}
void AddPolyn(PolyList& LC, PolyList& LA, PolyList& LB)//多项式相加
{
 PolyList l ,t,t1, t2;
 LC = new PNode;
 LC->next = NULL;
 l = LC;
 t1 = LA->next;
 t2 = LB->next;
 while (t1 && t2) {
  t = new PNode;
  if (t1->expn == t2->expn) {//指数相同
            if(t1->coef + t2->coef!=0){
   t->coef = t1->coef + t2->coef;
   t->expn = t1->expn;
   l->next = t;
   l = t;
            }
   t1 = t1->next;
   t2 = t2->next;
  }
  else if (t1->expn > t2->expn) {
   t->coef = t1->coef;
   t->expn = t1->expn;
   l->next = t;
   l = t;
   t1 = t1->next;
  }
  else {
   t->coef =t2->coef;
   t->expn = t2->expn;
   l->next = t;
   l = t;
   t2 = t2->next;
  }
 }
 if (t1) l->next = t1;
 if (t2) l->next = t2;
}
void MulltiPolyn(PolyList& LC, PolyList LA, PolyList LB)//多项式相乘
{
 PolyList l, t, t1, t2,pre,temp;
 LC = new PNode;
 LC->next = NULL;
 l = LC;
 t1 = LA->next;
 t2 = LB->next;
 while (t1) {//让每一个LB中的数据都与LA相乘
  t2 = LB->next;//每次从头遍历
  while (t2) {
   t = new PNode;
   t->coef = t2->coef*t1->coef;
   t->expn = t2->expn+t1->expn;
   pre = LC;//利用前驱,判断插入位置
   while (pre->next && pre->next->expn > t->expn) {//找位置
    pre = pre->next;
   }
   if (pre->next == NULL || pre->next->expn < t->expn) {//指数不相同,插入
    t->next = pre->next;
    pre->next = t;
   }
   else {//指数相同,相加
    pre->next->coef += t->coef;
                if(pre->next->coef==0){
                    temp=pre->next;
                    pre->next=temp->next;
                    delete temp;
                }
   }
   t2 = t2->next;
  }
  t1 = t1->next;
 }
}