Codeforces Round 396 (Div. 2) |
---|
Закончено |
Махмуд хочет составить новый словарь, содержащий n слов и отношения между ними. Бывает два типа отношений: синонимичность (что значит, что два слова означают одно и тоже) и антонимичность (что значит, что два слова означают противоположные вещи). Время от времени он узнает новые отношения между некоторыми словами.
Махмуд знает, что если между двумя словами есть отношение, то каждое из этих слов имеет отношения со всеми словами, которые имеют отношения к другому слову из пары. Например, если like означает то же, что и love, и love — противоположность hate, то like — тоже противоположность hate. Еще один пример: если love — противоположность hate, и hate — противоположность like, то love — то же, что и like, и так далее.
Иногда Махмуд узнает неверное отношение. Неверное отношение это такое отношение, которое делает два слова одним и тем же и противоположностями одновременно. Например, если он знает, что love — то же, что и like, и like — противоположность hate, и затем узнает, что hate — то же, что и like, то последнее отношение, конечно, неверное, потому что оно делает hate и like антонимами и синонимами одновременно.
После того, как Махмуд узнал много отношений между словами, он обеспокоился тем, что некоторые отношения могут быть неверными. Он решил рассказать о каждом отношении знакомому программисту Ехабу. Махмуд хочет знать для каждого отношения, верное оно или неверное, основываясь на отношениях, которые он узнал раньше. Если отношение неверное, то Махмуд его игнорирует и не использует его для проверки последующих отношений.
После того, как Махмуд расскажет о всех отношениях, он спросит Ехаба об отношениях между некоторыми словами, основываясь на информации, которую дал. Ехаб занят подготовкой раунда Codeforces, поэтому вы должны ему помочь.
В первой строке находятся три целых числа n, m и q (2 ≤ n ≤ 105, 1 ≤ m, q ≤ 105), где n — число слов в словаре, m — число отношений, которые узнал Махмуд, и q — число вопросов, которые Махмуд спросит после того, как расскажет о всех отношениях.
Вторая строка содержит n различных слов a1, a2, ..., an, состоящих из строчных букв латинского алфавита длиной не более 20 — слова в словаре.
Затем следуют m строк, каждая из них содержит целое число t (1 ≤ t ≤ 2), а за ним два различных слова xi и yi, которые встречались в словаре. Если t = 1, то xi — синоним yi, иначе xi — антоним yi.
Затем следуют q строк, каждая из них содержит два различных слова из словаря. Это те пары слов, для которых Махмуд хочет знать отношение на основе тех отношений, которые он узнал.
Все слова во входных данных состоят только из строчных букв латинского алфавита, их длина не превышает 20 символов.
В начале выведите m строк, по одной на каждое отношение. Если некоторое отношение неверно (т. е. делает два слова синонимами и антонимами одновременно), выведите «NO» (без кавычек) и игнорируйте его, иначе выведите «YES» (без кавычек).
После этого выведите q строк, по одной на каждый вопрос. Если два слова синонимы, выведите 1. Если они антонимы, выведите 2. Если между ними нет отношения, выведите 3.
Обратите внимание на тесты из условия для лучшего понимания.
3 3 4
hate love like
1 love like
2 love hate
1 hate like
love like
love hate
like hate
hate like
YES
YES
NO
1
2
2
2
8 6 5
hi welcome hello ihateyou goaway dog cat rat
1 hi welcome
1 ihateyou goaway
2 hello ihateyou
2 hi goaway
2 hi hello
1 hi hello
dog cat
dog hi
hi hello
ihateyou goaway
welcome ihateyou
YES
YES
YES
YES
NO
YES
3
3
1
1
2
Название |
---|