Mật mã Sherlock

Đề bài

Mô tả

Cho một xâu s 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í p với 1p<|s| và thực hiện một trong hai thao tác:

  • Thay sp bằng chữ cái đứng ngay sau nó trong bảng chữ cái, đồng thời thay sp+1 bằng chữ cái đứng ngay trước nó.
  • Thay sp bằng chữ cái đứng ngay trước nó, đồng thời thay sp+1 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 w được cho, hãy đếm số xâu khác w nhưng tương đương với w. In ra kết quả theo modulo 109+7.

Dữ liệu vào

  • Dòng đầu tiên chứa một số nguyên t — số bộ dữ liệu.
  • t dòng tiếp theo, mỗi dòng chứa một xâu w 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 109+7.

Ràng buộc

  • 1t104.
  • 1|w|100.
  • 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 24 xâu khác. "klmbfxzb" có 3320092814 xâu tương đương khác, lấy modulo 109+7 được 320092793.

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0