#include
#include
typedef struct Node
{
int coefficient;
int index;
struct Node *next;
}*DXS;
DXS creatlist(int n,DXS L)
{
int i;
DXS p,tmp;
L=(DXS)malloc(sizeof(DXS)+1);
scanf("%d%d",&(L->coefficient),&(L->index));
p=L;
for(i=0;i
{
tmp=(DXS)malloc(sizeof(DXS)+1);
p->next=tmp;
p=p->next;
scanf("%d%d",&(p->coefficient),&(p->index));
}
p->next=NULL;
return L;
}
DXS addlist(DXS L1,DXS L2)
{
int ch=0;
DXS p1=L1,p2=L2,pd,tmp;
while(p1->index>=p2->index)
{
if(p1->index>p2->index)
{
tmp=L2;
L2=p1;
p1=L2->next;
L2->next=tmp;
}
else
{
L2->coefficient+=p1->coefficient;
p1=p1->next;
}
}
pd=p2;
while(p1!=NULL)
{
while(p2!=NULL)
{
if(p2->index<p1->index)
{
tmp=(DXS)malloc(sizeof(DXS)+1);
tmp->coefficient=p1->coefficient;
tmp->index=p1->index;
tmp->next=p2;
pd->next=tmp;
pd=tmp;
break;
}
else if(p2->index==p1->index)
{
p2->coefficient+=p1->coefficient;
break;
}
p2=p2->next;
if(ch==0)
ch++;
else pd=pd->next;
}
if(p2==NULL)
{
tmp=(DXS)malloc(sizeof(DXS)+1);
tmp->coefficient=p1->coefficient;
tmp->index=p1->index;
pd->next=tmp;
pd=tmp;
pd->next=NULL;
}
p1=p1->next;
}
return L2;
}
DXS copylist(DXS L1)
{
DXS p1=L1,p2,L2,tmp;
tmp=(DXS)malloc(sizeof(DXS)+1);
p2=L2=tmp;
p2->coefficient=p1->coefficient;
p2->index=p1->index;
p1=p1->next;
while(p1!=NULL)
{
tmp=(DXS)malloc(sizeof(DXS)+1);
p2->next=tmp;
p2=tmp;
p2->coefficient=p1->coefficient;
p2->index=p1->index;
p1=p1->next;
}
p2->next=NULL;
return L2;
}
DXS mullist(DXS L1,DXS L2)
{
DXS L3,p1=L1,p2=L2,p3,tmp,L4;
int ch=0,cp=0;
L3=(DXS)malloc(sizeof(DXS)+1);
p3=L3;
p3->coefficient=p1->coefficient*p2->coefficient;
p3->index=p1->index+p2->index;
while(p1!=NULL)
{
while(p2!=NULL)
{
if(cp==0)
{
cp++;
p2=p2->next;
continue;
}
tmp=(DXS)malloc(sizeof(DXS)+1);
p3->next=tmp;
p3=tmp;
p3->coefficient=p1->coefficient*p2->coefficient;
p3->index=p1->index+p2->index;
p2=p2->next;
}
p3->next=NULL;
if(ch==0)
{
L4=copylist(L3);
ch++;
}
else L4=addlist(L3,L4);
p1=p1->next;
p2=L2;
L3->coefficient=0;
p3=L3;
}
return L4;
}
void printlist(DXS L)
{
DXS tmp;
while(L!=NULL)
{
tmp=L;
printf("%d %d ",L->coefficient,L->index);
L=L->next;
}
printf("\b\n");
}
int main()
{
int n,m;
DXS l1=NULL,l2=NULL,l3,l4;
scanf("%d",&n);
l1=creatlist(n,l1);
scanf("%d",&m);
l2=creatlist(m,l2);
l4=mullist(l1,l2);
l3=addlist(l1,l2);
printlist(l4);
printlist(l3);
return 0;
}