Contest Trại hè Miền Bắc 2026 - Thứ tự duyệt DFS

Xem dạng PDF

Gửi bài giải


Điểm: 80,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Output Only, Pascal, PyPy, Python, Scratch, TEXT

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài

Trong tính toán trên đồ thị, quá trình duyệt DFS trên một cây xuất phát từ gốc, khi đứng tại một đỉnh ~u~, thuật toán sẽ đi thăm các đỉnh con trực tiếp của ~u~ theo một thứ tự hoán vị bất kỳ. Dãy thứ tự DFS là dãy lưu lại các đỉnh theo đúng thứ tự mà chúng được ghé thăm lần đầu tiên.

Yêu cầu: Cho ~m~ dãy thứ tự duyệt theo chiều sâu (DFS order) của cùng một cây gồm ~n~ đỉnh (các đỉnh được đánh số từ ~1~ đến ~n~), bạn là đếm xem có tất cả bao nhiêu cấu trúc cây phân biệt có khả năng sinh ra tất cả ~m~ dãy DFS đã cho. Hai cây được coi là phân biệt nếu tồn tại ít nhất một đỉnh có tập hợp các đỉnh con trực tiếp trong hai cây khác nhau.

Input

  • Dòng đầu tiên chứa hai số nguyên ~n~ và ~m~ ~(1 \le n, m \le 500)~ — biểu thị số lượng đỉnh của cây và số lượng dãy DFS đã được ghi nhận.

  • ~m~ dòng tiếp theo, mỗi dòng chứa một hoán vị gồm ~n~ số nguyên phân biệt từ ~1~ đến ~n~, biểu diễn một dãy thứ tự DFS.

Dữ liệu đảm bảo phần tử đầu tiên của cả ~m~ dãy đều giống nhau.

Output

Một số nguyên duy nhất là số lượng cấu trúc cây phân biệt thỏa mãn điều kiện. Đưa ra số dư trong phép chia cho ~998244353~.

Scoring

Subtask Điểm Ràng buộc
1 ~10\%~ ~n \le 9; m \le 10~.
2 ~20\%~ ~m = 1~.
3 ~30\%~ ~n, m \le 50~.
4 ~40\%~ Không có giới hạn gì thêm.

Sample Input 1

5 2
1 2 3 4 5
1 4 5 2 3

Sample Output 1

4

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.