Cuộc chiến vi khuẩn
Đề bài
Mô tả
Một ống nghiệm nằm ngang được chia thành ô liên tiếp, đánh số từ đến . Mỗi ô chứa đúng một khuẩn lạc thuộc một loại vi khuẩn nào đó, mỗi loại được ký hiệu bằng một chữ cái Latin thường từ a đến z. Như vậy trạng thái của ống nghiệm tại mỗi thời điểm được mô tả bởi một xâu gồm chữ cái thường.
Thỉnh thoảng một khuẩn lạc có thể thôn tính một khuẩn lạc ở ô kề bên (bên trái hoặc bên phải, và phải nằm trong phạm vi ống nghiệm). Khi đó khuẩn lạc bị tấn công lập tức bị tiêu diệt và được thay bằng một khuẩn lạc cùng loại với kẻ tấn công, còn kẻ tấn công giữ nguyên loại của mình. Tại mỗi thời điểm chỉ có nhiều nhất một cuộc tấn công xảy ra.
Ví dụ với trạng thái ban đầu là babb, cuộc tấn công tiếp theo có khả năng: ô tấn công ô cho ra bbbb; ô tấn công ô cho ra aabb; ô tấn công ô cho ra baab; ô tấn công ô cho ra bbbb; còn ô tấn công ô hoặc ô tấn công ô đều không làm trạng thái thay đổi.
Cho trạng thái ban đầu của ống nghiệm, hãy đếm số trạng thái khác nhau có thể thu được sau một dãy tấn công bất kỳ. Dãy tấn công có thể rỗng, nên trạng thái ban đầu cũng được tính. Vì kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho .
Dữ liệu vào
- Dòng đầu chứa một số nguyên : số ô của ống nghiệm.
- Dòng thứ hai chứa xâu gồm chữ cái Latin thường, mô tả trạng thái ban đầu.
Dữ liệu ra
Một số nguyên duy nhất: số trạng thái khác nhau có thể thu được, lấy phần dư khi chia cho .
Ràng buộc
- chỉ gồm các chữ cái Latin thường từ
ađếnz
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 aaa |
1 | Mọi khuẩn lạc đều cùng loại nên không cuộc tấn công nào làm trạng thái thay đổi. |
| 2 ab |
3 | Ba trạng thái có thể có là ab (không tấn công), aa (ô thôn tính ô ) và bb (ô thôn tính ô ). |
| 4 babb |
11 | Nhiều hơn một cuộc tấn công có thể xảy ra, chẳng hạn babb → baab → bbbb. |
| 7 abacaba |
589 |
Bình luận