sig
  module type Int_type =
    sig
      type t
      type tref
      val name : unit -> string
      val add :
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val sub :
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val mul :
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val quo :
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val modulo :
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val quomod :
        Numerix.Int_type.t ->
        Numerix.Int_type.t -> Numerix.Int_type.t * Numerix.Int_type.t
      val abs : Numerix.Int_type.t -> Numerix.Int_type.t
      val neg : Numerix.Int_type.t -> Numerix.Int_type.t
      val sqr : Numerix.Int_type.t -> Numerix.Int_type.t
      val sqrt : Numerix.Int_type.t -> Numerix.Int_type.t
      val powmod :
        Numerix.Int_type.t ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val add_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val sub_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val mul_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val quo_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val quomod_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val abs_in : Numerix.Int_type.tref -> Numerix.Int_type.t -> unit
      val neg_in : Numerix.Int_type.tref -> Numerix.Int_type.t -> unit
      val sqr_in : Numerix.Int_type.tref -> Numerix.Int_type.t -> unit
      val sqrt_in : Numerix.Int_type.tref -> Numerix.Int_type.t -> unit
      val powmod_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.t ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val make_ref : Numerix.Int_type.t -> Numerix.Int_type.tref
      val copy_in : Numerix.Int_type.tref -> Numerix.Int_type.t -> unit
      val copy_out : Numerix.Int_type.tref -> Numerix.Int_type.t
      val look : Numerix.Int_type.tref -> Numerix.Int_type.t
      val add_1 : Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val sub_1 : Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val mul_1 : Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val quo_1 : Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val mod_1 : Numerix.Int_type.t -> int -> int
      val quomod_1 : Numerix.Int_type.t -> int -> Numerix.Int_type.t * int
      val pow : Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val root : Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val fact : int -> Numerix.Int_type.t
      val shr : Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val shl : Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val split :
        Numerix.Int_type.t -> int -> Numerix.Int_type.t * Numerix.Int_type.t
      val join :
        Numerix.Int_type.t -> Numerix.Int_type.t -> int -> Numerix.Int_type.t
      val add_1_in :
        Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> unit
      val sub_1_in :
        Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> unit
      val mul_1_in :
        Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> unit
      val quomod_1_in :
        Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> int
      val pow_in : Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> unit
      val root_in :
        Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> unit
      val fact_in : Numerix.Int_type.tref -> int -> unit
      val shl_in : Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> unit
      val shr_in : Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> unit
      val split_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.tref -> Numerix.Int_type.t -> int -> unit
      val join_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> int -> unit
      val gcd :
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val gcd_ex :
        Numerix.Int_type.t ->
        Numerix.Int_type.t ->
        Numerix.Int_type.t * Numerix.Int_type.t * Numerix.Int_type.t
      val cfrac :
        Numerix.Int_type.t ->
        Numerix.Int_type.t ->
        Numerix.Int_type.t * Numerix.Int_type.t * Numerix.Int_type.t *
        Numerix.Int_type.t * Numerix.Int_type.t
      val gcd_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val gcd_ex_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.tref ->
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val cfrac_in :
        Numerix.Int_type.tref ->
        Numerix.Int_type.tref ->
        Numerix.Int_type.tref ->
        Numerix.Int_type.tref ->
        Numerix.Int_type.tref ->
        Numerix.Int_type.t -> Numerix.Int_type.t -> unit
      val eq : Numerix.Int_type.t -> Numerix.Int_type.t -> bool
      val neq : Numerix.Int_type.t -> Numerix.Int_type.t -> bool
      val inf : Numerix.Int_type.t -> Numerix.Int_type.t -> bool
      val infeq : Numerix.Int_type.t -> Numerix.Int_type.t -> bool
      val sup : Numerix.Int_type.t -> Numerix.Int_type.t -> bool
      val supeq : Numerix.Int_type.t -> Numerix.Int_type.t -> bool
      val cmp : Numerix.Int_type.t -> Numerix.Int_type.t -> int
      val eq_1 : Numerix.Int_type.t -> int -> bool
      val neq_1 : Numerix.Int_type.t -> int -> bool
      val inf_1 : Numerix.Int_type.t -> int -> bool
      val infeq_1 : Numerix.Int_type.t -> int -> bool
      val sup_1 : Numerix.Int_type.t -> int -> bool
      val supeq_1 : Numerix.Int_type.t -> int -> bool
      val cmp_1 : Numerix.Int_type.t -> int -> int
      val sgn : Numerix.Int_type.t -> int
      val max :
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val min :
        Numerix.Int_type.t -> Numerix.Int_type.t -> Numerix.Int_type.t
      val nbits : Numerix.Int_type.t -> int
      val lowbits : Numerix.Int_type.t -> int
      val highbits : Numerix.Int_type.t -> int
      val nth_bit : Numerix.Int_type.t -> int -> bool
      val nth_word : Numerix.Int_type.t -> int -> int
      val random_bits : int -> Numerix.Int_type.t
      val of_int : int -> Numerix.Int_type.t
      val int_of : Numerix.Int_type.t -> int
      val string_of : Numerix.Int_type.t -> string
      val of_string : string -> Numerix.Int_type.t
      val toplevel_print : Numerix.Int_type.t -> unit
    end
  module Infixes :
    functor (E : Int_type->
      sig
        val ( + ) : E.t -> E.t -> E.t
        val ( - ) : E.t -> E.t -> E.t
        val ( * ) : E.t -> E.t -> E.t
        val ( / ) : E.t -> E.t -> E.t
        val ( % ) : E.t -> E.t -> E.t
        val ( /% ) : E.t -> E.t -> E.t * E.t
        val ( << ) : E.t -> int -> E.t
        val ( >> ) : E.t -> int -> E.t
        val ( ** ) : E.t -> int -> E.t
        val ( +. ) : E.t -> int -> E.t
        val ( -. ) : E.t -> int -> E.t
        val ( *. ) : E.t -> int -> E.t
        val ( /. ) : E.t -> int -> E.t
        val ( %. ) : E.t -> int -> int
        val ( /%. ) : E.t -> int -> E.t * int
        val ( +! ) : int -> int -> int
        val ( -! ) : int -> int -> int
        val ( *! ) : int -> int -> int
        val ( /! ) : int -> int -> int
        val ( %! ) : int -> int -> int
        val ( =. ) : E.t -> int -> bool
        val ( <>. ) : E.t -> int -> bool
        val ( <. ) : E.t -> int -> bool
        val ( <=. ) : E.t -> int -> bool
        val ( >. ) : E.t -> int -> bool
        val ( >=. ) : E.t -> int -> bool
        val ( =! ) : '-> '-> bool
        val ( <>! ) : '-> '-> bool
        val ( <! ) : '-> '-> bool
        val ( <=! ) : '-> '-> bool
        val ( >! ) : '-> '-> bool
        val ( >=! ) : '-> '-> bool
        val ( ~~ ) : E.tref -> E.t
      end
  module Big : Int_type
  module Slong : Int_type
  module Clong : Int_type
  module Dlong : Int_type
  module Gmp : Int_type
  external chrono : string -> unit = "chrono"
  module type Main_type = sig val main : string list -> unit end
  module Start :
    functor (Main : functor (E : Int_type-> Main_type->
      sig val start : unit -> unit end
end