QOJ.ac

QOJ

Límite de tiempo: 3.0 s Límite de memoria: 512 MB Puntuación total: 100 Hackeable ✓

#18135. Fajny graf

Estadísticas

Dany jest graf nieskierowany o $n$ wierzchołkach i $m$ krawędziach. Możesz wykonać następującą operację co najwyżej $2 \cdot \max(n, m)$ razy:

  • Wybierz trzy różne wierzchołki $a$, $b$ oraz $c$, a następnie dla każdej z krawędzi $(a, b)$, $(b, c)$ oraz $(c, a)$ wykonaj następujące czynności:
    • Jeśli krawędź nie istnieje, dodaj ją. W przeciwnym razie, jeśli istnieje, usuń ją.

Graf nazywamy cool wtedy i tylko wtedy, gdy spełniony jest jeden z poniższych warunków:

  • Graf nie posiada krawędzi, lub
  • Graf jest drzewem.

Musisz sprawić, aby graf stał się cool, wykonując powyższe operacje. Zauważ, że możesz wykonać co najwyżej $2 \cdot \max(n, m)$ operacji. Można wykazać, że zawsze istnieje co najmniej jedno rozwiązanie.

Wejście

Każdy test zawiera wiele przypadków testowych. Pierwsza linia wejścia zawiera jedną liczbę całkowitą $t$ ($1 \le t \le 10^4$) — liczbę przypadków testowych. Następuje opis przypadków testowych.

Pierwsza linia każdego przypadku testowego zawiera dwie liczby całkowite $n$ oraz $m$ ($3 \le n \le 10^5$, $0 \le m \le \min\left(\frac{n(n-1)}{2}, 2 \cdot 10^5\right)$) — liczbę wierzchołków oraz liczbę krawędzi.

Następnie następuje $m$ linii, z których $i$-ta zawiera dwie liczby całkowite $u_i$ oraz $v_i$ ($1 \le u_i, v_i \le n$) — dwa wierzchołki połączone $i$-tą krawędzią.

Gwarantuje się, że suma $n$ we wszystkich przypadkach testowych nie przekracza $10^5$, a suma $m$ we wszystkich przypadkach testowych nie przekracza $2 \cdot 10^5$.

Gwarantuje się, że w podanym grafie nie ma pętli własnych ani krawędzi wielokrotnych.

Wyjście

Dla każdego przypadku testowego w pierwszej linii wypisz liczbę całkowitą $k$ ($0 \le k \le 2 \cdot \max(n, m)$) — liczbę operacji.

Następnie wypisz $k$ linii, z których $i$-ta zawiera trzy różne liczby całkowite $a$, $b$ oraz $c$ ($1 \le a, b, c \le n$) — trzy wierzchołki wybrane w $i$-tej operacji.

Jeśli istnieje wiele rozwiązań, możesz wypisać dowolne z nich.

Przykład

Wejście 1

5
3 0
3 1
1 2
3 2
1 2
2 3
3 3
1 2
2 3
3 1
6 6
1 2
1 6
4 5
3 4
4 6
3 6

Wyjście 1

0
1
1 2 3
0
1
1 2 3
3
1 3 6
2 4 5
3 4 6

Uwagi

W pierwszym przypadku testowym graf jest już cool, ponieważ nie posiada krawędzi.

W drugim przypadku testowym, po wykonaniu jedynej operacji, graf staje się drzewem, więc jest cool.

W trzecim przypadku testowym graf jest już cool, ponieważ jest drzewem.

W czwartym przypadku testowym, po wykonaniu jedynej operacji, graf nie posiada krawędzi, więc jest cool.

W piątym przypadku testowym:

Graf przed operacją 1

Zauważ, że po pierwszej operacji graf stał się już cool, a wykonano dwie dodatkowe operacje. Ponieważ graf nadal jest cool po tych dwóch dodatkowych operacjach, jest to poprawne rozwiązanie.

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.