typedef struct node {
int data;
struct node * next;
} Node;
typedef struct list {
Node * first;
Node * last;
} list_datatype;
void init_list( ) ;
void insert_head_node( int x) ;
void insert_last_node( int x) ;
void insert_middle_node( int x, int location) ;
void delete_head( ) ;
void delete_last( ) ;
void display_list( ) ;
////////////////////////////
////////////////////////////
////////////////////////////
////////////////////////////
// add tow polynominal
typedef struct _node_poly
{
int coeff;
int pow ;
struct _node_poly * next;
} Node_Poly;
typedef struct _poly
{
Node_Poly * head;
struct _poly * next;
} Poly;
typedef struct list_poly
{
Poly * head;
} List_Poly;
Node_Poly* creat_node( int coeff, int pow ) ;
void add_node_poly( Poly * _Poly,Node_Poly * node) ;
void display_polynominal( Poly _Poly) ;
void add_two_polynominal( Poly _Poly1, Poly _Poly2, Poly * _Poly3) ;
int min( int a, int b) ;
int max( int a, int b) ;
void multiple_two_polynominal( Poly _Poly1, Poly _Poly2, Poly * _Poly3) ;
int length_poly( Poly _Poly) ;
void add_list_poly( List_Poly * _List_Poly,Poly * _Poly) ;
Poly convert_polycontro_to_poly_binhthuong( Poly * a) ;
dHlwZWRlZiBzdHJ1Y3Qgbm9kZSB7CiAgICBpbnQgZGF0YTsKICAgIHN0cnVjdCBub2RlICpuZXh0Owp9Tm9kZTsKdHlwZWRlZiBzdHJ1Y3QgbGlzdCB7CglOb2RlICpmaXJzdDsKCU5vZGUgKmxhc3Q7Cn1saXN0X2RhdGF0eXBlOwp2b2lkIGluaXRfbGlzdCgpOwp2b2lkIGluc2VydF9oZWFkX25vZGUoaW50IHgpOwp2b2lkIGluc2VydF9sYXN0X25vZGUoaW50IHgpOwp2b2lkIGluc2VydF9taWRkbGVfbm9kZShpbnQgeCwgaW50IGxvY2F0aW9uKTsKdm9pZCBkZWxldGVfaGVhZCgpOwp2b2lkIGRlbGV0ZV9sYXN0KCk7CnZvaWQgZGlzcGxheV9saXN0KCk7Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gYWRkIHRvdyBwb2x5bm9taW5hbAp0eXBlZGVmIHN0cnVjdCBfbm9kZV9wb2x5CnsKCWludCBjb2VmZjsKCWludCBwb3c7CglzdHJ1Y3QgX25vZGVfcG9seSAqbmV4dDsKfU5vZGVfUG9seTsKCnR5cGVkZWYgc3RydWN0IF9wb2x5CnsKCU5vZGVfUG9seSAqaGVhZDsKCXN0cnVjdCBfcG9seSAqbmV4dDsKfVBvbHk7Cgp0eXBlZGVmIHN0cnVjdCBsaXN0X3BvbHkKewoJUG9seSAqaGVhZDsKfUxpc3RfUG9seTsKCk5vZGVfUG9seSogY3JlYXRfbm9kZShpbnQgY29lZmYsIGludCBwb3cpOwp2b2lkIGFkZF9ub2RlX3BvbHkoUG9seSAqX1BvbHksTm9kZV9Qb2x5ICpub2RlKTsKdm9pZCBkaXNwbGF5X3BvbHlub21pbmFsKFBvbHkgX1BvbHkpOwp2b2lkIGFkZF90d29fcG9seW5vbWluYWwoUG9seSBfUG9seTEsIFBvbHkgX1BvbHkyLCBQb2x5ICpfUG9seTMpOwppbnQgbWluKGludCBhLCBpbnQgYik7CmludCBtYXgoaW50IGEsIGludCBiKTsKdm9pZCBtdWx0aXBsZV90d29fcG9seW5vbWluYWwoUG9seSBfUG9seTEsIFBvbHkgX1BvbHkyLCBQb2x5ICpfUG9seTMpOwppbnQgbGVuZ3RoX3BvbHkoUG9seSBfUG9seSk7CnZvaWQgYWRkX2xpc3RfcG9seShMaXN0X1BvbHkgKl9MaXN0X1BvbHksUG9seSAqX1BvbHkpOwpQb2x5IGNvbnZlcnRfcG9seWNvbnRyb190b19wb2x5X2Jpbmh0aHVvbmcoUG9seSAqYSk7