Багатопотокова Програма
Моріс налагоджує багатопотокову програму на своєму старому комп'ютері. Програма складається з кількох потоків, які працюють із набором спільних змінних. Кожен потік виконує свою власну послідовність присвоєнь у заздалегідь визначеному порядку програми. Кожне присвоєння встановлює одну зі змінних на ціле значення.
Коли програма запускається, присвоєння з різних потоків можуть виконуватися в будь-якому порядку. Єдина гарантія полягає в тому, що кожен потік виконує всі свої присвоєння у порядку програми.
Наприклад, припустимо, що програма має три потоки, які мають , та присвоєння у своїх послідовностях відповідно. Тоді одне з можливих виконань програми виглядає наступним чином:
потік виконує перше присвоєння у своїй послідовності;
потік виконує перше присвоєння у своїй послідовності;
потік виконує друге присвоєння у своїй послідовності;
потік виконує друге присвоєння у своїй послідовності;
потік виконує єдине присвоєння у своїй послідовності.
Це виконання можна описати як , де числа вказують на потоки, які виконують кожне присвоєння, у порядку. Зазначимо, що можливі й інші правильні виконання.
Моріс підозрює, що його машина зламана і може працювати неправильно. Він запустив свою програму і записав значення всіх змінних на кінці.
Знайдіть виконання програми, яке виконує всі присвоєння і призводить до записаних значень усіх змінних, або повідомте, що машина дійсно зламана і таке виконання не існує.
Вхідні дані
Перша строка містить одне ціле число — кількість потоків (). Потоки пронумеровані від до . Наступні строки описують послідовностей присвоєнь, по одній на кожен потік.
Перша строка -го опису містить ціле число — довжина послідовності присвоєнь -го потоку (). Кожна з наступних строк містить присвоєння у формі "<змінна>=<значення>
". Присвоєння наведені у порядку програми. Імена змінних складаються з не більше ніж малих англійських літер, а значення є додатними цілими числами, що не перевищують .
Перша з решти строк містить ціле число — кількість змінних (). Кожна з наступних строк містить ім'я змінної та її записане значення, яке є додатним цілим числом, що не перевищує . Кожна змінна, що використовується в програмі, наведена рівно один раз, і кожна наведена змінна використовується хоча б в одному присвоєнні.
Вихідні дані
Виведіть "Yes"
, якщо існує виконання, яке призводить до записаних значень, і "No"
в іншому випадку.
Якщо існує виконання, виведіть строку, що містить цілих чисел , що описують таке виконання (). Це вказує, що перше присвоєння виконується потоком , друге виконується потоком і так далі. Кожен потік виконує свої присвоєння у порядку програми. Після -го присвоєння кожна змінна повинна мати записане значення. -й потік повинен з'явитися в описі рівно разів.