CSES - Split into Two Paths | Chia Thành Hai Đường Đi

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2100 (p) Thời gian: 2.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Cho một đồ thị có hướng không chu trình với \(n\) đỉnh và \(m\) cạnh.

Hãy xác định liệu có thể tạo hai đường đi trong đồ thị sao cho mỗi đỉnh của đồ thị xuất hiện đúng một lần trong một trong hai đường đi hay không. Lưu ý rằng không nhất thiết tất cả các cạnh của đồ thị phải xuất hiện trong các đường đi.

Input

Dòng đầu tiên chứa hai số nguyên \(n\)\(m\): số đỉnh và số cạnh. Các đỉnh được đánh số \(1, 2, \dots, n\).

Sau đó có \(m\) dòng mô tả các cạnh. Mỗi dòng chứa hai số nguyên \(a\)\(b\): có một cạnh trong đồ thị từ đỉnh \(a\) đến đỉnh \(b\).

Output

Đầu tiên in ra dòng YES nếu có thể tạo các đường đi, hoặc NO nếu không.

Nếu có thể tạo các đường đi, hãy in chúng trên hai dòng tiếp theo.

Ở đầu mỗi dòng, in số lượng đỉnh trong đường đi, sau đó là các đỉnh của đường đi theo thứ tự. Giữa hai đỉnh liên tiếp phải có một cạnh trong đồ thị. Một trong hai đường đi có thể chứa không đỉnh nào.

Nếu có nhiều lời giải, bạn có thể in ra bất kỳ lời giải nào.

Constraints

  • \(2 \le n \le 2\cdot10^5\)

  • \(0 \le m \le 5\cdot 10^5\)

Example

Test 1

Input
5 4
1 2
1 4
3 4
4 5
Output
YES
2 1 2
3 3 4 5

Test 2

Input
5 4
1 2
1 3
1 4
1 5
Output
NO

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.