diff --git a/Makefile b/Makefile
index c36511e5c40a56025429fd0b2a3422ce79a55284..f48467d6d8da71cde5d369b52953baa28d1352da 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,8 @@
 all:
 	ocamlc -c polynome.ml 
+	ocamlc -c simplepolynome.ml 
 	ocamlc -c main.ml 
-	ocamlc -o bin/main nums.cma polynome.cmo main.cmo
+	ocamlc -o bin/main nums.cma polynome.cmo simplepolynome.cmo main.cmo
 clean:
 	rm -f *.cm[iox] *~ .*~ #*#
 	rm -f bin/main
diff --git a/polynome.ml b/polynome.ml
index d547bb60db60c23794fd20c0c9d9ea08a08db6cf..d4d47eb11fe29b3500c0fbb1eff7bf0143f67c9e 100644
--- a/polynome.ml
+++ b/polynome.ml
@@ -2,6 +2,20 @@
 
 open Big_int;;
 
+module type Coefficient =
+  sig
+    type coeff
+    val print_coeff: coeff -> string
+  end
+;;
+  
+module type Degree =
+  sig
+    type degree
+    val print_degree: degree -> string
+  end
+;;
+  
 module type Polynomes =
   sig
     type polynome
@@ -9,14 +23,14 @@ module type Polynomes =
   end
 ;;
 
-module Polynome : Polynomes =
+module Polynome (C : Coefficient) (D : Degree) =
   struct
     type polynome =
       |Null
-      |NotNull of big_int*int*polynome
+      |NotNull of C.coeff*D.degree*polynome
     let rec print_pol p = match p with
       |Null -> "0"
-      |NotNull (coeff, degree, polynome)->
-	(string_of_big_int coeff)^"X^"^(string_of_int degree)^"+"^(print_pol polynome)
+      |NotNull (cc, dd, pp)->
+	(C.print_coeff cc)^"X^"^(D.print_degree dd)^"+"^(print_pol pp)
   end
 ;;