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