← Home
package main

import (
	"bufio"
	"io"
	"os"
	"strconv"
	"strings"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	s := strings.TrimSpace(string(data))
	n := len(s)

	levels := make([][]string, 0)
	stack := make([]int, 0)

	for i := 0; i < n; {
		for len(stack) > 0 && stack[len(stack)-1] == 0 {
			stack = stack[:len(stack)-1]
		}

		depth := len(stack) + 1

		start := i
		for i < n && s[i] != ',' {
			i++
		}
		word := s[start:i]
		i++

		cnt := 0
		for i < n && s[i] != ',' {
			cnt = cnt*10 + int(s[i]-'0')
			i++
		}

		for len(levels) < depth {
			levels = append(levels, nil)
		}
		levels[depth-1] = append(levels[depth-1], word)

		if len(stack) > 0 {
			stack[len(stack)-1]--
		}
		stack = append(stack, cnt)

		if i < n && s[i] == ',' {
			i++
		}
	}

	w := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer w.Flush()

	w.WriteString(strconv.Itoa(len(levels)))
	if len(levels) > 0 {
		w.WriteByte('\n')
	}
	for i := 0; i < len(levels); i++ {
		for j, word := range levels[i] {
			if j > 0 {
				w.WriteByte(' ')
			}
			w.WriteString(word)
		}
		if i+1 < len(levels) {
			w.WriteByte('\n')
		}
	}
}