#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct Lnode
{
int xs;
int zs;
struct Lnode *next;
} Lnode,*LinkList;
LinkList creat()
{
LinkList h,p,q;
int x,y;
h=new Lnode;
q=h;
cin>>x>>y;
while(x!=0&&y!=0)
{
p=new Lnode;
p->xs=x;
p->zs=y;
q->next=p;
q=q->next;
cin>>x>>y;
}
p->next=NULL;
return h;
}
int bc(LinkList h)
{
LinkList p;
int length;
p=h->next;
length=0;
while(p!=NULL)
{
length++;
p=p->next;
}
return length;
}
LinkList xj(LinkList h1,LinkList h2)
{
LinkList s,p,q,i,j,m,n;
s=new Lnode;
if(bc(h1)<bc(h2))
{
s=h1;
h1=h2;
h2=s;
}
i=h1;
j=h2;
p=h1->next;
q=h2->next;
while(q!=NULL)
{
if(p->zs>q->zs)
{
m=q;
q=q->next;
j->next=q;
p=m->next;
i->next=m;
p=p->next;
i=i->next;
}
if(p->zs<q->zs)
{
p=p->next;
i=i->next;
}
if(p->zs==q->zs)
{
p->xs=p->xs+q->xs;
n=q;
q=q->next;
j->next=q;
free(n);
}
}
return h1;
}
void display(LinkList h)
{
LinkList p;
char x;
p=h->next;
while(p!=NULL)
{
if(p->next==NULL)
{
cout<<p->xs<<"x"<<"^"<<p->zs<<endl;
p=p->next;
}
else
{
cout<<p->xs<<"x"<<"^"<<p->zs<<"+";
p=p->next;
}
}
}
int main()
{
LinkList head,head1,head2;
head1=creat();
head2=creat();
head=xj(head1,head2);
display(head);
return 0;
}
A(x)=x^2+x^3+3x^4
B(x)=x+3x^2
A(x)+B(x)=?