Contest Edu #2 - Đồ thị lộn xộn

Xem dạng PDF

Gửi bài giải


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

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Xét đoạn code sau:

dfs_order = [] # empty list
def DFS(u):
    visited[u] = True
    dfs_order.append(u)
        for vertex v that is directly connected to u:
        # note that the order of v is totally random
        if visited[v] == False:
            DFS(v)
DFS(random(1,n))

Trong đó:

  • Mảng dfs_order sẽ lưu lại thứ tự DFS của đồ thị trên.

Cho một hoán vị của dãy số từ ~1~ tới ~n~, đếm xem có bao nhiêu cấu hình đồ thị khác nhau nhận hoán vị này là một thứ tự DFS hợp lệ. Hai cấu hình đồ thị ~G_1~ và ~G_2~ được gọi là khác nhau nếu tồn tại một cạnh trong ~G_1~ mà không có trong ~G_2~ hoặc ngược lại.

Yêu cầu

Bạn hãy in ra số cấu hình đồ thị thỏa thứ tự DFS được cho.

Dữ liệu

Đầu vào
  • Dòng đầu gồm số nguyên dương ~n~ (~1 \leq n \leq 5000~).
  • Dòng tiếp theo gồm ~n~ số nguyên dương ~a_1, a_2, ..., a_n~ biểu diễn một thứ tự DFS. Dữ liệu đảm bảo (~a_1, ..., a_n~) là một hoán vị của dãy số (~1, 2, ..., n~).
Kết quả
  • Gồm một số duy nhất là số đồ thị nhận hoán vị trên là một thứ tự DFS hợp lệ theo modulo ~998\ 244\ 353~.

Ví dụ

Input 1
2
2 1
Output 1
1
Input 2
3 
3 1 2 
Output 2
3

Giải thích

  • Trong test ví dụ đầu tiên, chỉ có một đồ thị, đồ thị đầy đủ kích thước nhận ~2, 1~ làm một thứ tự DFS hợp lệ.
  • Trong test ví dụ thứ 2, có 3 đồ thị sau nhận ~3, 1, 2~ làm một thứ tự DFS hợp lệ:


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.