Mật mã Sherlock
Đề bài
Mô tả
Cho một xâu gồm các chữ cái Latinh in thường. Trong một phép biến đổi, bạn chọn một vị trí với và thực hiện một trong hai thao tác:
- Thay bằng chữ cái đứng ngay sau nó trong bảng chữ cái, đồng thời thay bằng chữ cái đứng ngay trước nó.
- Thay bằng chữ cái đứng ngay trước nó, đồng thời thay bằng chữ cái đứng ngay sau nó.
Chữ a không có chữ đứng trước, chữ z không có chữ đứng sau — nếu phép biến đổi yêu cầu một thay đổi không hợp lệ thì không được thực hiện.
Hai xâu được coi là tương đương nếu có thể biến đổi xâu này thành xâu kia bằng một dãy (có thể rỗng) các phép biến đổi.
Với mỗi xâu được cho, hãy đếm số xâu khác nhưng tương đương với . In ra kết quả theo modulo .
Dữ liệu vào
- Dòng đầu tiên chứa một số nguyên — số bộ dữ liệu.
- dòng tiếp theo, mỗi dòng chứa một xâu gồm các chữ cái Latinh in thường.
Dữ liệu ra
Với mỗi xâu, in ra trên một dòng số xâu khác nó nhưng tương đương với nó, theo modulo .
Ràng buộc
- .
- .
- Các xâu có thể có độ dài khác nhau.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 1 ab |
1 | Chỉ có duy nhất một xâu khác tương đương với "ab" là "ba". |
| 1 aaaaaaaaaaa |
0 | Không phép biến đổi nào áp dụng được vì mọi thao tác đều yêu cầu giảm một chữ a. |
| 2 ya klmbfxzb |
24 320092793 |
"ya" tương đương với "xb", "wc", ..., "ay" — tổng cộng xâu khác. "klmbfxzb" có xâu tương đương khác, lấy modulo được . |
Bình luận