Задачі
Розрізання графа
Розрізання графа
Задано неорієнтовний граф. Над ним у заданом порядку виконуються операції наступних двох типів:
\begin{itemize}
\item \textbf{cut} --- розрізати граф, тобто видалити з нього ребро;
\item \textbf{ask} --- перевірити, чи лежать дві вершини графа у одній компоненті зв'язності.
\end{itemize}
Відомо, що після виконання усіх операцій типу \textbf{cut} ребер в графі не залишилось. Знайдіть результат виконання кожної з операцій типу \textbf{ask}.
\InputFile
Перший рядок містить три цілих числа, відокремлені пропусками --- кількість вершин графа $n$, кількість ребер $m$ та кількість операцій $k~ (1 \le n \le 50000, 0 \le m \le 10^5, m \le k ≤ 150000)$.
Наступні $m$ рядків задають ребра графа; $i$-й з цих рядків містить два числа $u_i$ та $v_i~(1 \le u_i, v_i \le n)$ --- номери кінців i-го ребра. Вершини нумеруються з одиниці; граф не містить кратних ребер та петель.
Далі йде $k$ рядків, які описують операції. Операція типу \textbf{cut} задається рядком "\textbf{cut u v}" $~(1 \le u, v \le n)$, який означає. що з графа видаляють ребро між вершинами $u$ та $v$. Операція типу \textbf{ask} задається рядком "\textbf{ask u v}" $~(1 \le u, v \le n)$, який означає, що необхідно взнати, чи лежать у даний момент вершини $u$ та $v$ в одній компоненті зв'язності. Гарантується, що кожне ребро графа зустрінеться в операціях типу \textbf{cut} рівно один раз.
\OutputFile
Для кожної операції \textbf{ask} виведіть у окремому рядку слово "\textbf{YES}", якщо дві вказані вершини лежать у одній компоненті зв'язності, і "\textbf{NO}" у протилежному випадку. Порядок відповідей повинен відповідати порядку операцій \textbf{ask} у вхідних даних.
Вхідні дані #1
3 3 7 1 2 2 3 3 1 ask 3 3 cut 1 2 ask 1 2 cut 1 3 ask 2 1 cut 2 3 ask 3 1
Вихідні дані #1
YES YES NO NO