Многоуровневая система обработки событий с делегатами

C# Сложный delegates

Задача «Многоуровневая система обработки событий с делегатами»

Разработайте программу, которая моделирует многоуровневую систему обработки событий. На вход подаётся последовательность команд. Каждая команда может быть: 'ADD <уровень> <имя_обработчика>' — добавить обработчик (метод без возвращаемого значения, принимающий строку) на указанный уровень (целое число от 1 до 10); 'REMOVE <уровень> <имя_обработчика>' — удалить обработчик с уровня; 'FIRE <уровень> <событие>' — вызвать все обработчики указанного уровня с данным событием (строкой). Обработчики на одном уровне вызываются в порядке добавления. Если обработчик с таким именем уже существует на уровне, он не добавляется повторно. При удалении несуществующего обработчика ничего не происходит. Имена обработчиков — латинские буквы и цифры, до 20 символов. События — произвольные строки без пробелов до 100 символов.

Формат ввода

В первой строке целое число N (1 ≤ N ≤ 1000) — количество команд. Далее N строк команд в формате: ADD <уровень> <имя_обработчика> или REMOVE <уровень> <имя_обработчика> или FIRE <уровень> <событие>.

Формат вывода

Для каждой команды FIRE выведите строку, содержащую результаты вызова всех обработчиков данного уровня, разделённые пробелом, в порядке их вызова. Если на уровне нет обработчиков, выведите 'NONE'. Каждый обработчик выводит на консоль строку вида '<имя_обработчика>:<событие>'.

main.cs