sig
  type state
  type move = N | S | E | W
  type tile = int
  val apply : state -> move -> state
  val moves : state -> move list
  val is_goal : state -> bool
  val equal : state -> state -> bool
  val goodness : state Util.comparator
  type animstate
  val init : state -> animstate
  val render : animstate -> state -> (float * move) option -> unit
  val of_list : int -> TilePuzzle.tile list -> TilePuzzle.state
end