snippet. Верните true, если он корректен по следующим правилам, и false иначе.
- **Имя тега** — от 1 до 9 заглавных латинских букв.
- **Открывающий тег** — <ИМЯ>, **закрывающий** — </ИМЯ>. Каждый символ < (кроме начала сырого блока) начинает тег, и всё до ближайшего следующего > считается его именем (после / для закрывающего). Если > нет или имя недопустимо, фрагмент некорректен.
- **Элемент** — открывающий тег, содержимое и закрывающий тег с тем же именем. Содержимое может включать произвольный текст, другие элементы и сырые блоки; теги должны быть правильно вложены.
- **Сырой блок** начинается с <![CDATA[ и заканчивается на первом последующем ]]>. Всё внутри — обычный текст, даже если похоже на теги. Блок без ]]> делает фрагмент некорректным.
- Весь фрагмент целиком должен быть **ровно одним элементом**: никакого текста, блоков или других элементов до или после него.
Символ > вне тегов — обычный текст.snippet='<NOTE>buy milk <B>today</B></NOTE>' → True
Внешний тег NOTE закрыт, внутри — текст и правильно вложенный тег B.
snippet='<P><![CDATA[<a> is not a tag]]></P>' → True
Всё между <![CDATA[ и ]]> — обычный текст, поэтому <a> с недопустимым именем ничего не ломает.
snippet='<A><B></A></B>' → False
Теги пересекаются: A закрывается раньше вложенного в него B.
snippet состоит из латинских букв, цифр, пробелов и символов <, >, /, !, [, ], .snippet='<NOTE>buy milk <B>today</B></NOTE>'
True
«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 218 тестов на сервере, включая скрытые.