Вибори#8494

Вибори

3 секунди
128 мегабайтів
Легка

У найближчий час у Берляндії відбудуться нові парламентські вибори. Кожна з політичних партій прагне бути обраною до парламенту. У Берляндії діє закон, що дозволяє обирати лише ті партії, які отримали більше певної кількості голосів. Тому деякі малі партії намагаються використовувати різні технології, щоб зібрати необхідну кількість голосів.

Перша технологія є цілком законною. Дві або більше партій можуть об'єднатися для участі у виборах, утворюючи так званий виборчий блок.

Друга технологія не така легальна. Деякі партії володіють специфічною інформацією про своїх опонентів, які не хочуть, щоб ця інформація стала загальнодоступною.

Якщо кілька партій об'єднуються в один виборчий блок, їхня інформація також об'єднується, що робить їх сильнішими. Проте опоненти кожної партії блоку знають щось дискредитуюче про весь блок. Партія або блок можуть мати певну "чорну" інформацію про себе.

Пронумеруємо партії натуральними числами від до . Партіям і блокам дозволено об'єднуватися в нові блоки, які будуть нумеруватися послідовними натуральними числами (n + 1, n + 2, і так далі).

Вам потрібно написати програму, яка обробляє запити двох типів:

Вхідні дані

Перший рядок містить числа і (1 \leq n \leq 100\,000, 1 \leq m \leq 200\,000). Кожен з наступних рядків містить пару цілих чисел і , що вказують на те, що група володіє деякими дискредитуючими знаннями про групу (1 \leq a, b \leq n). Наступний рядок містить число (1 \leq q \leq 200\,000). Кожен з наступних рядків містить запит. Запит першого типу виглядає як . Запит другого типу виглядає як . Ви повинні обробляти запити в тому порядку, в якому вони вказані. Кожна пара , посилається лише на існуючі партії та блоки. Гарантується, що і різні в будь-якому запиті , але вони можуть бути однакові в запиті .

Вихідні дані

Виведіть в окремому рядку YES або NO для кожного запиту першого виду.

Приклади

Приклад 1

Loading
Loading