object Main extends App {

  def findHollow(shapes: List[Char]): List[Char] = {

    def find(shapes: List[Char], flood: List[Char], depth: Int): List[Char] = {
      if (shapes.isEmpty)
        List()
      else shapes.head match {
        case '\\' => find(shapes.tail, '\\'::flood, depth + 1)
        case '_'  => find(shapes.tail, '_'::flood,  depth)
        case '/'  =>
          if (depth == 1) ('/'::flood).reverse
          else find(shapes.tail, '/'::flood, depth - 1)
      }
    }

    if (shapes.nonEmpty && shapes.head == '\\')
      find(shapes, List(), 0)
    else
      List()
  }

  def findAllFloods(diagram: String): List[String] = {

    def findAll(shapes: List[Char], floods: List[String]): List[String] = {
      if (shapes.isEmpty)
        floods.reverse
      else shapes.head match {
        case '\\' => {
          val hollow = findHollow(shapes)
          if (hollow.isEmpty)
            findAll(shapes.tail, floods)
          else
            findAll(shapes drop hollow.length, hollow.mkString::floods)
        }
        case _ => findAll(shapes.tail, floods)
      }
    }

    findAll(diagram.toList, List())
  }

  def calcAmountOfWater(pool: String): Int = {

    def calc(shapes: Seq[Char], amount: Double, depth: Int): Double = {
      if (shapes.isEmpty)
        amount
      else shapes.head match {
        case '\\' => calc(shapes.tail, amount + depth + 0.5, depth + 1)
        case '_'  => calc(shapes.tail, amount + depth,       depth)
        case '/'  => calc(shapes.tail, amount + depth - 0.5, depth - 1)
      }
    }

    calc(pool, 0.0, 0).toInt
  }

  val in = Console.in.readLine()

  val floods = findAllFloods(in)
  val amounts = floods map calcAmountOfWater

  println(amounts.sum)
  println((amounts.length::amounts) mkString " ")
}

