sig
  exception NoMoreStates
  val get_offsets : int array -> int array
  val idx_to_varstate : int array -> int -> int array
  val varstate_to_idx : int array -> int array -> int
  val state_to_idx : int array -> int array -> int array -> int
  val incstate : int array -> int array -> int list -> unit
  val map_state : int array -> int list -> (int array -> 'a) -> 'a list
  val iter_state : int array -> int list -> (int array -> 'a) -> unit
end