package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	inp := StdinToStrings()
	for i := range inp {
		ln, gb := RemoveGarbage(inp[i])
		fmt.Print(ln)
		v := FindGroupValue(ln)
		fmt.Println(" :: Value:", v, ":: Garbage:", gb)
	}
}

func FindGroupValue(inp string) int {
	var ret, depth int
	for i := 0; i < len(inp); i++ {
		switch inp[i] {
		case '{':
			depth++
			ret += depth
		case '}':
			depth--
		}
	}
	return ret
}

func GetOuterGroup(inp string) string {
	var ret string
	gCount := 1
	for i := range inp[1:] {
		if gCount == 0 {
			break
		}
		ret += string(inp[i])
		switch inp[i] {
		case '{':
			gCount++
		case '}':
			gCount--
		}
	}
	return ret
}

func RemoveGarbage(inp string) (string, int) {
	var ret string
	var isGarbage, ignore bool
	var cnt int
	for i := 0; i < len(inp); i++ {
		if isGarbage {
			if ignore {
				ignore = false
				continue
			}

			switch inp[i] {
			case '!':
				ignore = true
				continue
			case '>':
				isGarbage = false
			default:
				cnt++
			}
		} else {
			switch inp[i] {
			case '<':
				isGarbage = true
			default:
				ret += string(inp[i])
			}
		}
	}
	return ret, cnt
}

func StdinToStrings() []string {
	var input []string
	scanner := bufio.NewScanner(os.Stdin)
	for scanner.Scan() {
		input = append(input, scanner.Text())
	}
	return input
}
