Граф? Ви впевнені?#233

Граф? Ви впевнені?

1,5 секунди
256 мегабайтів
Дуже складна

Якщо ви не вірите, ви не зможете досягти.

Джефф Лонг

Спочатку є вершин і немає жодних ребер. Кожне додане ребро має ціле число c_i на ньому. Ми визначаємо простий шлях між двома вершинами та , які належать до однієї компоненти, як найкоротший шлях від до . Розглянемо простий шлях між двома вершинами як гарний, якщо кожне значення на цьому шляху має парну кількість входжень. Вам потрібно відповісти на запитів типів:

Гарантується, що в усіх запитах першого типу ребро з'єднує дві різні компоненти.

Вхідні дані

Перший рядок містить два цілі числа (1 \le n \le 2 \cdot 10^5) та (1 \le q \le 2 \cdot 10^5) — кількість вершин та запитів відповідно.

Кожен з наступних рядків містить опис запиту. Перше ціле число t_i визначає тип запиту.

  • t_i = 1\: визначає запит першого типу і за ним йдуть цілі числа , (1 \leq u \neq v \leq n), (1 \le c \le 4 \cdot 10^9)

  • t_i = 2\: визначає запит другого типу і за ним йдуть цілі числа , (1 \le u,v \le n)

  • t_i = 3\: визначає запит третього типу і за ним йде ціле число (1 \le u \le n)

  • t_i = 4\: визначає запит четвертого типу.

Вихідні дані

Для кожного запиту другого типу виведіть

  • -1, якщо простого шляху не існує

  • YES, якщо простий шлях вважається гарним

  • NO в іншому випадку.

Для кожного запиту третього або четвертого типу виведіть одне ціле число — відповідь на відповідний запит.

Відповіді на запити повинні бути виведені в тому ж порядку, в якому вони з'являються у вхідних даних.

Приклади

Приклад 1

Loading
Loading

Оцінювання

  1. ( балів): для всіх t_i=1 u_i = 1;

  2. ( балів): n,q \le 20;

  3. ( балів): n,q \le 1000;

  4. ( бали): t_i \le t_{i+1}, t_i \le 2, c = 1;

  5. ( балів): t_i \le t_{i+1}, t_i \le 2, c \le 8;

  6. ( балів): t_i \le t_{i+1}, t_i \le 2;

  7. ( балів): q = n, t_i = 1 для 1 \le i < n, t_q = 4;

  8. ( балів): існує ціле число таке, що всі t_i = 1 для всіх 1 \le i \le e, і для всіх e < j \le q t_i \neq 1;

  9. ( балів): c \le 1000, граф та тести генеруються випадковим чином, тобто для кожної вершини (2 \le v \le n) ми випадково вибираємо p_v (1 \le p_v < v), потім ми генеруємо випадкову перестановку та робимо v = perm_v, p_v = perm_{p_v}. Тип запиту вибирається випадково (ми не виберемо перший тип, якщо немає ребер для додавання). Усі значення в запитах вибираються випадково;

  10. ( балів): без додаткових обмежень.