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

Задача . C. Числовой шаблон строки


У Кристины есть массив \(a\), называемый шаблоном, и состоящий из \(n\) целых чисел. Также у нее есть \(m\) строк, каждая из которых состоит только из строчных латинских букв. Строки пронумерованы от \(1\) до \(m\). Она хочет проверить, какие из них соответствуют шаблону.

Считается, что некоторая строка \(s\) соответствует шаблону, если одновременно верны все следующие условия:

  • Длина строки \(s\) равна количеству элементов в массиве \(a\).
  • Одинаковым числам из \(a\) соответствуют одинаковые символы из \(s\). То есть, если \(a_i = a_j\), то \(s_i = s_j\) для (\(1 \le i, j \le n\)).
  • Одинаковым символам из \(s\) соответствуют одинаковые числа из \(a\). То есть, если \(s_i = s_j\), то \(a_i = a_j\) для (\(1 \le i, j \le n\)).
Другими словами, между символами строки и элементами массива должно существовать взаимно-однозначное соответствие.

Например, если \(a\) = [\(3, 5, 2, 1, 3\)], то строка «abfda» соответствует шаблону, а строка «afbfa» — нет, так как символу «f» одновременно соответствуют числа \(1\) и \(5\).

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

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка каждого набора содержит ровно \(n\) целых чисел \(a_i\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора содержит единственное целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество строк, для которых необходимо проверить соответствие шаблону.

Далее следуют \(m\) строк, каждая из которых содержит непустую строку \(s_j\) (\(1 \le |s_j| \le 2 \cdot 10^5\)), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\), а также что сумма длин всех строк не превосходит \(2 \cdot 10^5\).

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

Для каждого набора входных данных выведите \(m\) строк. На \(i\)-й строке (\(1 \le i \le m\)) выведите:

  • «YES», если строка с индексом \(i\) соответствует шаблону;
  • «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии задачи.


Примеры
Входные данныеВыходные данные
1 3
5
3 5 2 1 3
2
abfda
afbfa
2
1 2
3
ab
abc
aa
4
5 -3 5 -3
4
aaaa
bcbc
aba
cbcb
YES
NO
YES
NO
NO
NO
YES
NO
YES

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

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