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

Задача . E. Вася и паттерны


У Васи есть три строки \(s\), \(a\) и \(b\), состоящие из первых \(k\) букв латинского алфавита.

Назовем паттерном строку длины \(k\), где каждая из первых \(k\) букв латинского алфавита встречается ровно один раз (таким образом, существует ровно \(k!\) различных паттернов). Применение паттерна \(p\) к строке \(s\) — это замена каждой буквы строки \(s\) на \(p_i\), где \(i\) – это порядковый номер этой буквы в латинском алфавите. Например, применив паттерн «bdca» к строке «aabccd» мы получим строку «bbdcca».

Васю интересует, существует ли такой паттерн, применив который к строке \(s\), он получит строку, лексикографически больше либо равную строки \(a\) и лексикографически меньше либо равную строки \(b\).

Если существует несколько подходящих паттернов, разрешается вывести любой.

Строка \(a\) лексикографически меньше строки \(b\), если существует такое \(i\) (\(1 \le i \le n\)), что \(a_i < b_i\), а для любого \(j\) (\(1 \le j < i\)) \(a_j = b_j\).

В этой задаче вам необходимо ответить на \(t\) независимых тестовых наборов.

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

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

Во взломах можно использовать только \(t = 1\).

Каждая из следующих \(t\) строк содержит описание тестового набора в следующем формате:

Первая строка тестового набора содержит целое число \(k\) (\(1 \le k \le 26\)) — длина необходимого паттерна.

Вторая строка тестового набора содержит строку \(s\) (\(1 \le |s| \le 10^6\)).

Третья строка тестового набора содержит строку \(a\).

Четвертая строка тестового набора содержит строку \(b\).

Строки \(s\), \(a\) и \(b\) имеют одинаковую длину (\(|s| = |a| = |b|\)) и состоят из первых \(k\) букв латинского алфавита, все буквы строчные.

Гарантируется, что строка \(a\) лексикографически меньше либо равна строке \(b\).

Также гарантируется, что сумма длин строк по всем тестовым наборам не превосходит \(3 \cdot 10^6\).

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

На каждый тестовый набор выведите ответ в следующем формате:

Если не существует подходящего паттерна, то в первой строке выведите «NO».

Иначе в первой строке выведите «YES», а во второй сам паттерн (\(k\) строчных букв, каждая из первых \(k\) букв латинского алфавита должна встретиться ровно один раз).

Если существует несколько подходящих паттернов — разрешается вывести любой.


Примеры
Входные данныеВыходные данные
1 2
4
bbcb
aada
aada
3
abc
bbb
bbb
YES
badc
NO

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

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