Олимпиадный тренинг

Задача . E. Сопоставление шаблонов


Вам даны \(n\) шаблонов \(p_1, p_2, \dots, p_n\) и \(m\) строк \(s_1, s_2, \dots, s_m\). Каждый шаблон \(p_i\) состоит из \(k\) символов, каждый из которых — это либо строчная латинская буква или символ подчеркивания. Все шаблоны попарно различны. Каждая строка \(s_j\) состоит из \(k\) строчных латинских букв.

Строка \(a\) подходит под шаблон \(b\), если для каждого \(i\) от \(1\) до \(k\) либо \(b_i\) — это подчеркивание, либо \(b_i=a_i\).

Вам требуется переупорядочить шаблоны таким образом, что первый шаблон, под который подходит \(j\)-я строка, — это \(p[mt_j]\). Разрешается не изменять порядок шаблонов.

Можно ли осуществить такое переупорядочивание? Если можно, то выведите любой корректный порядок.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) and \(k\) (\(1 \le n, m \le 10^5\), \(1 \le k \le 4\)) — количество шаблонов, количество строк и длина каждого шаблона и строки.

В каждой из следующих \(n\) строк записан шаблон — \(k\) символов, каждый из которых — это либо строчная латинская буква или символ подчеркивания. Все шаблоны попарно различны.

В каждой из следующих \(m\) строк записана строка — \(k\) строчных латинских букв, и целое число \(mt\) (\(1 \le mt \le n\)) — номер первого шаблона, под который должна подходить соответствующая строка.

Выходные данные

Выведите «NO», если невозможно переупорядочить шаблоны так, чтобы первый шаблон, под который подходит \(j\)-я строка, был \(p[mt_j]\).

В противном случае выведите «YES» в первой строке. Во второй строке выведите \(n\) различных целых чисел от \(1\) до \(n\) — порядок шаблонов. Если существует несколько ответов, выведите любой из них.

Примечание

Порядок шаблонов в первом примере после переупорядочивания:

  • aaaa
  • __b_
  • ab__
  • _bcd
  • _b_d

Тогда первая строка подходит под шаблоны ab__, _bcd, _b_d в таком порядке, первый из них равен ab__, который действительно \(p[4]\). Вторая строка подходит под шаблоны __b_ и ab__, первый из них __b_, который равен \(p[2]\). Последняя строка подходит под шаблоны _bcd и _b_d, первый из них _bcd, который равен \(p[5]\).

Ответ на этот тест не единственный, другие корректные порядки существуют.

Во втором примере cba не подходит под шаблон __c, а значит, корректного порядка не существует.

В третьем примере в порядке (a_, _b) получается, что первый шаблон под который подходят обе строки — это \(1\), а в порядке (_b, a_) получается, что первый шаблон под который подходят обе строки — это \(2\). Значит, не существует такого порядка, что ответ равен \(1\) и \(2\).


Примеры
Входные данныеВыходные данные
1 5 3 4
_b_d
__b_
aaaa
ab__
_bcd
abcd 4
abba 2
dbcd 5
YES
3 2 4 5 1
2 1 1 3
__c
cba 1
NO
3 2 2 2
a_
_b
ab 1
ab 2
NO

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя