Cho một đa đồ thị có hướng gồm n đỉnh và m cung. Hãy đi qua mỗi cung đúng một lần.
Nếu có nhiều đường đi hợp lệ, cần in dãy đỉnh nhỏ nhất theo thứ tự từ điển. Hai dãy được so sánh tại vị trí đầu tiên mà chúng khác nhau.
Input
Dòng đầu chứa hai số nguyên n và m.
Mỗi trong m dòng tiếp theo chứa hai số u và v, biểu diễn một cung đi từ u đến v.
Output
Nếu tồn tại, in m+1 nhãn đỉnh của đường đi nhỏ nhất theo thứ tự từ điển trên một dòng.
Nếu không tồn tại, in No.
Constraints
1≤n≤105.
1≤m≤2⋅105.
Mỗi cung u→v có u và v trong đoạn từ 1 đến n.
Đồ thị nhận được khi bỏ hướng của mọi cung là liên thông trên toàn bộ n đỉnh.
Có thể có cung song song và cung tự quay.
Scoring
Subtask 1 (50% số điểm): n≤10 và m≤10.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
4 5
1 2
1 3
2 1
3 4
4 1
Output
1 2 1 3 4 1
Giải thích: Dãy 121341 dùng đủ năm cung. Sau tiền tố bắt đầu ở 1, chọn đích 2 trước 3 làm dãy nhỏ hơn theo thứ tự từ điển.
Lời giải tóm tắt
Mô hình: Mỗi cung có hướng là một cạnh cần dùng đúng một lần. Bán bậc vào/ra quyết định đỉnh bắt đầu, còn thứ tự các đích quyết định thứ tự từ điển.
Thuật toán: Kiểm tra chênh lệch out-in. Chọn đỉnh bắt đầu bắt buộc nếu đường đi mở, nếu là chu trình chọn đỉnh nhỏ nhất có cung ra; sắp các đích và chạy Hierholzer lấy đích nhỏ nhất.
Chứng minh đúng: Một đường đi mở có đúng một đỉnh thừa một cung ra và một đỉnh thừa một cung vào; chu trình có mọi đỉnh cân bằng. Hierholzer dùng mỗi cung đúng một lần. Sắp đích tăng dần và xử lý theo thứ tự đó tạo dãy nhỏ nhất tại vị trí khác nhau đầu tiên.
Độ phức tạp: Thời gian: O(m log m). Bộ nhớ nằm trong cùng bậc với cấu trúc đồ thị hoặc số trạng thái được lưu.
Lỗi thường gặp: lấy đích lớn nhất trước.
Lỗi thường gặp: bỏ qua đỉnh thừa cung ra và bắt đầu ở đỉnh nhỏ nhất có cung.
Lỗi thường gặp: chỉ chấp nhận đường đi mở và bác bỏ chu trình Euler.