| 2021-2022 ICPC NERC (NEERC), North-Western Russia Regional Contest (Northern Subregionals) |
|---|
| Закончено |
Морис отлаживает многопоточную программу на своей старой машине. Программа имеет несколько потоков, работающих с общими переменными. Каждый поток выполняет свою последовательность присваиваний в предопределенном порядке программы. Каждое присваивание устанавливает одну из переменных в целочисленное значение.
При запуске программы присваивания из разных потоков могут выполняться в любом порядке. Единственная гарантия состоит в том, что каждый поток выполняет все свои присваивания в порядке программы.
Например, предположим, что программа имеет три потока, в их последовательностях есть $$$2$$$, $$$2$$$ и $$$1$$$ присваивания соответственно. Тогда одно допустимое выполнение программы выглядит следующим образом:
Это выполнение можно описать как $$$1, 2, 2, 1, 3$$$, где числа указывают потоки, выполняющие каждое присваивание в порядке. Обратите внимание, что возможны и другие допустимые выполнения.
Морис подозревает, что его машина сломана и может работать неправильно. Он запустил свою программу и записал значения всех переменных в конце.
Найдите выполнение программы, которое выполняет все присваивания и приводит к записанным значениям всех переменных, или сообщите, что машина действительно сломана и такое выполнение не существует.
Первая строка содержит одно целое число $$$t$$$ — количество потоков ($$$1 \leq t \leq 100$$$). Потоки нумеруются от $$$1$$$ до $$$t$$$. Следующие строки описывают $$$t$$$ последовательностей присваиваний, по одной на каждый поток.
Первая строка $$$i$$$-го описания содержит целое число $$$l_i$$$ — длину последовательности присваиваний $$$i$$$-го потока ($$$1 \leq l_i \leq 100$$$). Каждая из следующих $$$l_i$$$ строк содержит присваивание в формате "<переменная>=<значение>". Присваивания перечислены в порядке программы. Имена переменных состоят из не более $$$10$$$ строчных английских букв, а значения — положительные целые числа, не превышающие $$$10^9$$$.
Первая из оставшихся строк содержит целое число $$$k$$$ — количество переменных ($$$1 \le k \le 10\,000$$$). Каждая из следующих $$$k$$$ строк содержит имя переменной и ее записанное значение, которое является положительным целым числом, не превышающим $$$10^9$$$. Каждая переменная, используемая в программе, перечислена ровно один раз, и каждая перечисленная переменная используется хотя бы в одном присваивании.
Выведите "Yes", если существует выполнение, приводящее к записанным значениям, и "No" в противном случае.
Если выполнение существует, выведите строку, содержащую $$$s = l_1 + l_2 + \dotsb + l_t$$$ целых чисел $$$c_1, c_2, \ldots, c_s$$$, описывающих такое выполнение ($$$1 \le c_i \le t$$$). Это указывает, что первое присваивание выполняется потоком $$$c_1$$$, второе — потоком $$$c_2$$$ и так далее. Каждый поток выполняет свои присваивания в порядке программы. После $$$s$$$-го присваивания каждая переменная должна иметь записанное значение. Поток $$$i$$$ должен появляться в описании ровно $$$l_i$$$ раз.
2 2 a=1 b=2 2 b=1 a=2 2 a 1 b 1
No
3 5 start=1 counter=1111 counter=10 counter=3333 finish=1 4 start=2 counter=20 counter=10 finish=2 3 start=3 qwerty=787788 finish=3 4 counter 10 start 1 finish 1 qwerty 787788
Yes 2 3 3 2 1 1 3 1 1 2 2 1
| Название |
|---|


