trang chủ / bài tập / constmach

Máy ghi chữ

Đề bài

Mô tả

Một chiếc máy ghi chữ hoạt động như sau: bạn đọc lần lượt từng chữ cái, máy sẽ viết chúng lên giấy theo đúng thứ tự đó. Tuy nhiên chiếc máy bị chỉnh sửa nên có hai chữ cái bị ghi sai:

  • Khi bạn đọc chữ w, máy viết ra uu (hai chữ u).
  • Khi bạn đọc chữ m, máy viết ra nn (hai chữ n).

Mọi chữ cái khác đều được viết đúng như khi đọc.

w luôn bị thay bằng uum luôn bị thay bằng nn, nên bản thân hai chữ wm không bao giờ xuất hiện trên giấy.

Cho xâu s là nội dung đọc được trên giấy. Hãy đếm số xâu khác nhau mà nếu đọc vào máy thì máy sẽ viết ra đúng xâu s. Do kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho 109+7.

Nếu không có xâu nào tạo ra được s, in ra 0.

Dữ liệu vào

Một dòng duy nhất chứa xâu s gồm các chữ cái Latin thường.

Dữ liệu ra

Một số nguyên duy nhất: số xâu thoả mãn, lấy phần dư khi chia cho 109+7.

Ràng buộc

  • 1|s|105
  • s chỉ gồm các chữ cái Latin thường (a đến z)

Ví dụ

Input Output Giải thích
ouuokarinn 4 Bốn xâu tạo ra được ouuokarinnouuokarinn, ouuokarim, owokarim, owokarinn. Cụm uu có thể do đọc uu hoặc đọc w, cụm nn có thể do đọc nn hoặc đọc m, hai lựa chọn này độc lập nhau nên có 2×2=4 cách.
banana 1 Mỗi chữ n đều đứng riêng lẻ nên không thể gộp thành m. Chỉ có chính banana.
nnn 3 Ba xâu là nnn, nm (chữ n rồi chữ m) và mn (chữ m rồi chữ n). Với một dãy k chữ n liên tiếp, số cách chia thành các nhóm một hoặc hai chữ là số Fibonacci.
amanda 0 Xâu chứa chữ m, mà máy không bao giờ viết ra m. Vậy không xâu nào tạo ra được nó.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0