Дана контекстно-свободная формальная грамматика в сокращенной форме Хомского (см. раздел Примечания для объяснения этих терминов) и ориентированный граф, где каждое ребро помечено терминалом грамматики.
Найдите длину кратчайшего пути в графе от вершины $$$s$$$ до вершины $$$t$$$, такого что конкатенация меток на этом пути принадлежит языку грамматики, или укажите, что такого пути нет.
Первая строка содержит количество продукций в грамматике $$$p$$$ ($$$1 \le p \le 100$$$).
Каждая из следующих $$$p$$$ строк содержит продукцию в форме либо 'A -> BC', либо 'A -> a'. Строчные английские буквы являются терминалами, заглавные английские буквы являются нетерминалами, и заглавная буква 'S' является начальным нетерминалом. Гарантируется, что S появляется в левой части как минимум одной продукции.
Следующая строка содержит четыре целых числа $$$n$$$, $$$m$$$, $$$s$$$ и $$$t$$$ ($$$1 \le s, t \le n \le 26$$$; $$$0 \le m \le n^2$$$), обозначающих количество вершин в графе, количество ребер в графе и индексы начальной и конечной вершин.
Каждая из следующих $$$m$$$ строк содержит описание ребра в форме 'u v x', обозначающеe ребро из вершины $$$u$$$ в вершину $$$v$$$ с меткой $$$x$$$ ($$$1 \le u, v \le n$$$; $$$x$$$ - строчная английская буква). В графе нет кратных ребер, но могут быть петли и разные ребра из $$$u$$$ в $$$v$$$ и из $$$v$$$ в $$$u$$$.
Если нет пути от $$$s$$$ до $$$t$$$ с метками, образующими строку из языка, выведите 'NO'. В противном случае выведите длину кратчайшего такого пути.
Неформально говоря, контекстно-свободная формальная грамматика - это набор терминалов (строчные английские буквы в этой задаче), набор нетерминалов (заглавные английские буквы в этой задаче) и набор правил, определяющих, как нетерминал может быть заменен строкой из нетерминалов или терминалов.
Сокращенная форма Хомского - это форма, в которой каждое правило является заменой либо одного терминала, либо ровно двух нетерминалов. Фактически, любая контекстно-свободная грамматика, не генерирующая пустую строку, может быть преобразована в сокращенную форму Хомского.
Строка терминалов принадлежит языку грамматики, если можно использовать правила для преобразования строки из единственного начального нетерминала в данную строку. Некоторые формальные детали можно найти на https://en.wikipedia.org/wiki/Context-free_grammar.
Формальная грамматика в двух последних примерах определяет все непустые правильные последовательности скобок, где открывающие скобки обозначены 'c', а закрывающие скобки обозначены 'j'.
5S -> ABA -> aA -> AAB -> BBB -> b8 8 1 41 2 a2 3 b3 4 a1 5 a5 6 a6 7 a7 8 b8 4 b
5
6S -> SSS -> LAS -> LRA -> SRL -> cR -> j4 5 1 11 2 c2 3 c3 1 j1 4 j4 3 j
12
6S -> SSS -> LAS -> LRA -> SRL -> cR -> j4 5 1 41 2 c2 1 c2 3 c3 4 j4 3 j
NO