Багатопотокова Програма#11144

Багатопотокова Програма

2 секунди
512 мегабайтів
Складна

Моріс налагоджує багатопотокову програму на своєму старому комп'ютері. Програма складається з кількох потоків, які працюють із набором спільних змінних. Кожен потік виконує свою власну послідовність присвоєнь у заздалегідь визначеному порядку програми. Кожне присвоєння встановлює одну зі змінних на ціле значення.

Коли програма запускається, присвоєння з різних потоків можуть виконуватися в будь-якому порядку. Єдина гарантія полягає в тому, що кожен потік виконує всі свої присвоєння у порядку програми.

Наприклад, припустимо, що програма має три потоки, які мають , та присвоєння у своїх послідовностях відповідно. Тоді одне з можливих виконань програми виглядає наступним чином:

Це виконання можна описати як 1, 2, 2, 1, 3, де числа вказують на потоки, які виконують кожне присвоєння, у порядку. Зазначимо, що можливі й інші правильні виконання.

Моріс підозрює, що його машина зламана і може працювати неправильно. Він запустив свою програму і записав значення всіх змінних на кінці.

Знайдіть виконання програми, яке виконує всі присвоєння і призводить до записаних значень усіх змінних, або повідомте, що машина дійсно зламана і таке виконання не існує.

Вхідні дані

Перша строка містить одне ціле число  — кількість потоків (1 \leq t \leq 100). Потоки пронумеровані від до . Наступні строки описують послідовностей присвоєнь, по одній на кожен потік.

Перша строка -го опису містить ціле число l_i — довжина послідовності присвоєнь -го потоку (1 \leq l_i \leq 100). Кожна з наступних l_i строк містить присвоєння у формі "<змінна>=<значення>". Присвоєння наведені у порядку програми. Імена змінних складаються з не більше ніж малих англійських літер, а значення є додатними цілими числами, що не перевищують 10^9.

Перша з решти строк містить ціле число  — кількість змінних (1 \le k \le 10\,000). Кожна з наступних строк містить ім'я змінної та її записане значення, яке є додатним цілим числом, що не перевищує 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 і так далі. Кожен потік виконує свої присвоєння у порядку програми. Після -го присвоєння кожна змінна повинна мати записане значення. -й потік повинен з'явитися в описі рівно l_i разів.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading