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')
}
}
}