E. Анализатор исключений
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Опишем синтаксис языка программирования $$$EX$$$:

  1. $$$func\ f() \{ \dots \}$$$ — объявление функции $$$f$$$ (в скобочках — тело).
  2. $$$maybethrow\ Exc_1$$$ — команда, которая может выбросить исключение вида $$$Exc_1$$$, а может и не выбросить.
  3. $$$try\ \{ \dots \}\ suppress\ Exc_1$$$ — если внутри этого блока происходит исключение вида $$$Exc_1$$$, то оно подавляется.
  4. $$$f()$$$ — вызов функции $$$f$$$.

В языке $$$EX$$$ все инструкции, кроме объявлений функций, могут находиться только в теле какой-либо функции. Функции нельзя объявлять внутри других функций. Функцию можно вызывать до её определения, а также в её собственном теле. Имена функций и исключений в языке $$$EX$$$ должны подходить под регулярное выражение $$$[a-zA-Z0-9\_]+$$$, быть уникальными и не совпадать с ключевыми словами [$$$func$$$, $$$try$$$, $$$suppress$$$, $$$maybethrow$$$]. Текст программы может содержать произвольное количество пробелов и пустых срок.

На вход подаётся программа на языке $$$EX$$$ и число $$$x$$$. Для каждой функции программы необходимо вывести не более $$$x$$$ исключений, которые могут вылететь из неё. Выводить следует $$$x$$$ лексикографически наименьших исключений.

Входные данные

В первой строке входных данных находится единственное число  — $$$x$$$ ($$$1 \leq x \leq 10^3$$$). Во второй строке находится единственное число  — $$$n$$$, количество объявлений функций в коде. В последующих строках находится текст программы на языке $$$EX$$$.

Количество вызовов функций в коде не превосходит $$$10^3$$$.

Количество видов исключений в коде не превосходит $$$10^3$$$.

Количество символов в коде не превосходит $$$10^6$$$.

Выходные данные

Для каждой функции, объявленной в программе, необходимо вывести одну или несколько строк:

  1. Имя функции, с последующим двоеточием.
  2. $$$t$$$  — число исключений в этой функции, либо $$$x$$$, если функция содержит более $$$x$$$ исключений.
  3. Список из $$$t$$$ лексикографически минимальных исключений, которые могут вылететь из этой функции.
Пример
Входные данные
1
2
func func1() {
maybethrow exc1
try {
maybethrow exc2
maybethrow exc3

} suppress exc1, exc2, exc3
maybethrow exc4

}

func main() {
try {
func1()
} suppress exc1
}
Выходные данные
func1:
1
exc1
main:
1
exc4