#include <iostream>
using namespace std;
class ListNode
{
public:
int data1, data2;
ListNode *next;
ListNode()
{
next = NULL;
}
};
class linklist
{
public:
ListNode *head;
int len;
linklist()
{
head = new ListNode;
len = 0;
}
~linklist()
{
ListNode *p, *q;
p = head;
while(p)
{
q = p;
p = p->next;
delete q;
}
len = 0;
head = NULL;
}
void createlist(int n)
{
int i;
ListNode *q = head;
int d1, d2;
for(i = 0; i < n; i++)
{
cin >> d1 >> d2;
ListNode *p = new ListNode;
p->data1 = d1;
p->data2 = d2;
q->next = p;
p->next = NULL;
q = p;
}
len = n;
}
void display()
{
int i;
ListNode *p = head->next;
for(i = 0; i < len; i++)
{
if(p->data1 == 0)
{
p = p->next;
continue;
}
else if(p->data2 == 0)
{
if(p->data1 < 0)
cout << "(" << p->data1 << ")";
else
cout << p->data1;
p = p->next;
}
else
{
if(p->data1 < 0)
cout << "(" << p->data1 << ")x^";
else
cout << p->data1 << "x^";
if(p->data2 < 0)
cout << "(" << p->data2 << ")";
else
cout << p->data2;
p = p->next;
}
if(i != len-1)
cout << " + ";
}
cout << endl;
}
void add(linklist *q)
{
ListNode *pre = head;
ListNode *s = pre->next;
ListNode *r = q->head->next;
while(s != NULL && r != NULL)
{
if(s->data2 < r->data2)
{
s = s->next;
pre = pre->next;
}
else if(s->data2 == r->data2)
{
s->data1 = s->data1+r->data1;
s = s->next;
pre = pre->next;
r = r->next;
q->len--;
}
else
{
ListNode *m = new ListNode;
m->data1 = r->data1;
m->data2 = r->data2;
m->next = s;
pre->next = m;
r = r->next;
pre = pre->next;
//len++;
q->len--;
}
}
if(r)
{
pre->next = r;
len = len+q->len;
}
}
ListNode *index(int i)
{
int k;
ListNode *p = head;
if(i != 0)
{
for(k = 1; k < i; k++)
{
p = p->next;
}
return p->next;
}
else
{
return head;
}
}
};
int main()
{
int T, n, m;
cin >> T;
while(T--)
{
linklist *l1 = new linklist,*l2 = new linklist;
cin >> n;
l1->createlist(n);
cin >> m;
l2->createlist(m);
l1->display();
l2->display();
l1->add(l2);
l1->display();
delete l1, l2;
}
return 0;
}