object Utils {
  def enumerate[T](s: Seq[T]): Set[Map[T, Boolean]] = {
    if (s.isEmpty) Set(Map())
    else {
      enumerate(s.tail).flatMap(m => Set(
        m.updated(s.head, true),
        m.updated(s.head, false),
      ))
    }
  }

  def randomMap[T](s: Seq[T]): Map[T, Boolean] = {
    s.map(t => t -> util.Random.nextBoolean()).toMap
  }

  def mapToString[A,B](m: Map[A,B]): String = {
    m.toList.sortBy(_._1.toString).map {
      case (id, value) => s"  $id -> $value"
    }.mkString("\n")
  }
}
