QOJ.ac

QOJ

시간 제한: 1 s 메모리 제한: 512 MB 총점: 100 해킹 가능 ✓

#385. Гра

통계

«狂野飙车» — улюблена гра 小L. На відміну від інших гравців-аматорів, 小L не лише грає, а й добре досліджує будову гри, тому має власну незвичайну стратегію.

Опис задачі

小L планує зіграти $n$ ігор. Для кожної гри використовується одна карта, і 小L вибирає автомобіль, на якому пройде гру на цій карті.

У 小L є три гоночні автомобілі, позначені великими літерами $A$, $B$, $C$. Карти бувають чотирьох типів, позначених малими літерами $x$, $a$, $b$, $c$. Автомобіль $A$ не підходить для карти $a$, автомобіль $B$ — для карти $b$, а автомобіль $C$ — для карти $c$. Карта $x$ підходить для всіх автомобілів. Карти, що підходять для всіх автомобілів, трапляються рідко: їх буде не більше ніж $d$.

Карти для $n$ ігор можна описати рядком малих літер. Наприклад, $S=\texttt{xaabxcbc}$ означає, що 小L планує зіграти 8 ігор. У першій і п'ятій іграх карти мають тип $x$ і підходять для всіх автомобілів; у другій і третій — тип $a$ і не підходять для автомобіля $A$; у четвертій і сьомій — тип $b$ і не підходять для автомобіля $B$; у шостій і восьмій — тип $c$ і не підходять для автомобіля $C$.

小L має особливі вимоги до гри. Кожну вимогу можна описати четвіркою $(i,h_i,j,h_j)$: якщо в $i$-й грі використовується автомобіль моделі $h_i$, то в $j$-й грі слід використати автомобіль моделі $h_j$.

Допоможіть 小L вибрати автомобіль для кожної гри. Якщо існує кілька варіантів, виведіть будь-який із них. Якщо розв'язку немає, виведіть -1 (без лапок).

Вхідні дані

Зчитайте дані з файлу game.in.

Перший рядок містить два невід'ємні цілі числа $n,d$.

Другий рядок містить рядок $S$.

Значення $n,d,S$ описані в умові. Рядок $S$ містить $n$ символів, рівно $d$ з яких — малі літери $x$.

Третій рядок містить додатне ціле число $m$ — кількість правил використання автомобілів. Кожен із наступних $m$ рядків містить четвірку $i,h_i,j,h_j$, де $i,j$ — цілі числа, а $h_i,h_j$ — символи $a$, $b$ або $c$. Їхнє значення описане в умові.

Вихідні дані

Виведіть результат у файл game.out.

Виведіть один рядок.

Якщо розв'язку немає, виведіть -1 (без лапок).

Якщо розв'язок існує, рядок має містити лише великі літери $A$, $B$, $C$ і мати довжину $n$. Він описує, як 小L використовуватиме автомобілі в цих $n$ іграх. Якщо існує кілька розв'язків, виведіть будь-який із них.

Приклади

Вхідні дані 1

3 1
xcc
1
1 A 2 B

Вихідні дані 1

ABA

Приклад 2

Дивіться файли game/game2.in і game/game2.ans у каталозі учасника.

Пояснення до прикладу 1

小L планує зіграти 3 гри. У першій грі карта має тип $x$ і підходить для всіх автомобілів. У другій і третій іграх карти мають тип $c$ і не підходять для автомобіля $C$.

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

Тоді вибір автомобілів $A$, $B$, $A$ відповідно для цих 3 ігор задовольняє всі умови.

Варіанти BBB і BAA для цих 3 ігор також задовольняють усі умови та вважаються правильними відповідями. А варіанти AAB і ABC не задовольняють усі умови, тому не вважаються правильними відповідями.

Підзадачі

Номер тесту $n$ $d$ $m$ Інші властивості
1 $\le 2$ $0$ $\le 4$ Немає
2 $\le 2$ $\le n$ $\le 4$ Немає
3 $\le 5$ $0$ $\le 10$ Немає
4 $\le 5$ $\le n$ $\le 10$ Немає
5 $\le 10$ $0$ $\le 20$ Немає
6 $\le 10$ $\le 8$ $\le 20$ Немає
7 $\le 20$ $0$ $\le 40$ $S$ містить лише $c$
8 $\le 20$ $0$ $\le 40$ Немає
9 $\le 20$ $\le 8$ $\le 40$ $S$ містить лише $x$ або $c$
10 $\le 20$ $\le 8$ $\le 40$ Немає
11 $\le 100$ $0$ $\le 200$ $S$ містить лише $c$
12 $\le 100$ $0$ $\le 200$ Немає
13 $\le 100$ $\le 8$ $\le 200$ $S$ містить лише $x$ або $c$
14 $\le 100$ $\le 8$ $\le 200$ Немає
15 $\le 5000$ $0$ $\le 10000$ Немає
16 $\le 5000$ $\le 8$ $\le 10000$ $S$ містить лише $x$ або $c$
17 $\le 5000$ $\le 8$ $\le 10000$ Немає
18 $\le 50000$ $0$ $\le 100000$ Немає
19 $\le 50000$ $\le 8$ $\le 100000$ $S$ містить лише $x$ або $c$
20 $\le 50000$ $\le 8$ $\le 100000$ Немає

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.