canuc80k7320·21/40

Chuỗi DNA Không Bệnh

Nộp bài trên LQDOJ

Bài 7.4 · Aho Corasick

Một occurrence của mẫu là một đoạn con liên tiếp bằng đúng mẫu đó. Hai occurrence có thể chồng lấn.

Đếm số xâu DNA độ dài đúng không chứa bất kỳ mẫu cấm nào dưới dạng đoạn con liên tiếp; in kết quả modulo .

Input

  • Dòng đầu chứa hai số nguyên và .
  • dòng tiếp theo lần lượt chứa các mẫu cấm. Nếu thì không có dòng nào phía sau.

Output

  • In một số nguyên duy nhất: số xâu hợp lệ sau khi lấy modulo .

Constraints

  • .
  • .
  • Mỗi mẫu cấm có độ dài từ đến và chỉ gồm .
  • Các mẫu có thể trùng nhau; việc lặp lại một mẫu không làm thay đổi tập xâu hợp lệ.

Scoring

  • Subtask ( điểm): test nhỏ, phù hợp với lời giải trực tiếp theo định nghĩa.
  • Subtask ( điểm): test không có giới hạn bổ sung.

Example

Test 1

Input

2 2
A
CG

Output

8

Giải thích: Nếu tránh , mỗi vị trí chỉ còn ba lựa chọn , tạo xâu. Trong số đó chỉ CG bị cấm thêm, nên còn xâu.

Lời giải tóm tắt
  • Ý tưởng: Xây Aho-Corasick và truyền cờ bad qua failure link. Trên các trạng thái an toàn, lập ma trận chuyển đếm số ký tự DNA đưa từ trạng thái này sang trạng thái kia, rồi lũy thừa ma trận đến n.
  • Tính đúng đắn: Mỗi xâu DNA ứng với duy nhất một đường đi n cạnh trong automaton. Cờ bad đúng chính xác khi một mẫu cấm vừa kết thúc, kể cả qua failure suffix; vì vậy các đường chỉ qua trạng thái an toàn song ánh với xâu hợp lệ, và lũy thừa ma trận đếm đúng số đường.
  • Độ phức tạp: O(Q^3 log n + 4Q) thời gian và O(Q^2) bộ nhớ, Q ≤ 101.