Một học kỳ có n chuyên đề, được đánh số từ 1 đến n. Có m ràng buộc; ràng buộc ab yêu cầu chuyên đề a phải hoàn thành trước chuyên đề b.
Hãy tìm một thứ tự chứa đủ n chuyên đề và thỏa mãn mọi ràng buộc. Có thể in bất kỳ thứ tự hợp lệ nào. Khi không tồn tại thứ tự như vậy, in IMPOSSIBLE.
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ố nguyên a và b, biểu thị rằng a phải đứng trước b.
Output
In một hoán vị của các số từ 1 đến n thỏa mãn mọi ràng buộc. Nếu không có hoán vị hợp lệ, in IMPOSSIBLE.
Constraints
1≤n≤105.
1≤m≤2⋅105.
1≤a,b≤n với mọi ràng buộc.
Scoring
Subtask 1 (50% số điểm): n≤9 và m≤20.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
6 5
3 1
5 2
1 4
2 4
4 6
Output
3 5 1 2 4 6
Giải thích: Hai chuyên đề 3 và 5 chưa phụ thuộc chuyên đề nào nên có thể được hoàn thành trước. Sau đó lần lượt mở được 1,2,4 và cuối cùng là 6, nên dãy đã in thỏa cả năm ràng buộc.
Lời giải tóm tắt
Phân tích: Mỗi ràng buộc a b buộc a xuất hiện trước b. Ta xem các chuyên đề là đỉnh và mỗi ràng buộc là một cạnh có hướng. Một chuyên đề chỉ có thể được chọn khi không còn cạnh nào đi vào nó từ phần chưa xử lý.
Thuật toán: Tính bậc vào của từng đỉnh và đưa mọi đỉnh có bậc vào bằng 0 vào hàng đợi. Mỗi lần lấy một đỉnh ra, nối nó vào đáp án rồi xóa ảnh hưởng của các cạnh đi ra bằng cách giảm bậc vào của đỉnh cuối cạnh. Đỉnh vừa có bậc vào bằng 0 được đưa vào hàng đợi. Nếu cuối cùng thu được ít hơn n đỉnh thì phần còn lại chứa chu trình, vì vậy in IMPOSSIBLE.
Chứng minh tính đúng: Khi một đỉnh được lấy khỏi hàng đợi, bậc vào hiện tại của nó bằng 0, nên mọi đỉnh bắt buộc đứng trước nó đều đã nằm trong đáp án. Do đó mỗi lần nối thêm một đỉnh vẫn giữ dãy hiện tại hợp lệ. Nếu thuật toán lấy đủ n đỉnh, mọi cạnh đều hướng từ vị trí sớm đến vị trí muộn, nên đáp án đúng. Ngược lại, nếu hàng đợi rỗng khi vẫn còn đỉnh, mọi đỉnh còn lại có ít nhất một tiền nhiệm còn lại; lần theo các tiền nhiệm hữu hạn sẽ gặp lại một đỉnh và tạo chu trình, nên không có thứ tự hợp lệ.