trang chủ / đề bài / pocketbk

Sổ tay bỏ túi

Đề bài

Mô tả

Cho n cái tên, mỗi tên là một xâu gồm đúng m chữ cái Latin in hoa. Các tên được đánh số từ 1 đến n theo thứ tự đã cho.

Một thao tác được định nghĩa như sau: chọn ba số nguyên i,j,k với 1≤i<j≤n và 1≤k≤m, rồi hoán đổi tiền tố độ dài k của tên thứ i và tên thứ j. Ví dụ, với hai tên "CBDAD" và "AABRD", nếu hoán đổi tiền tố độ dài 3 thì thu được "AABAD" và "CBDRD".

Bạn được phép thực hiện thao tác trên bao nhiêu lần tùy ý; mỗi lần chọn i,j,k độc lập với các lần trước. Hãy đếm xem tên ở vị trí số 1 có thể trở thành bao nhiêu tên khác nhau. Vì kết quả có thể rất lớn, hãy in ra kết quả theo modulo 109+7.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên n và m — số lượng tên và độ dài mỗi tên.
  • n dòng tiếp theo, mỗi dòng chứa một tên gồm đúng m chữ cái Latin in hoa.

Dữ liệu ra

  • In ra một số nguyên duy nhất — số lượng tên khác nhau có thể xuất hiện ở vị trí số 1, lấy theo modulo 109+7.

Ràng buộc

  • 1≤n,m≤100
  • Mỗi tên gồm đúng m chữ cái Latin in hoa (A–Z).

Ví dụ

Input Output Giải thích
2 3
AAB
BAA
4 Ở vị trí số 1 có thể tạo ra: "AAB", "AAA", "BAA" và "BAB", tổng cộng 4 tên. Xét từng cột: cột 1 có {A, B}, cột 2 có {A}, cột 3 có {B, A}, nên số tên là 2×1×2=4.
4 5
ABABA
BCGDG
AAAAA
YABSA
216 Số chữ cái phân biệt ở mỗi cột lần lượt là 3,3,3,4,2, nên kết quả là 3·3·3·4·2=216.

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.402 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.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0