Ngôn ngữ Reberland
Đề bài
Mô tả
Trong ngôn ngữ Reberland, mỗi từ được xây dựng theo quy tắc sau:
- Chọn một gốc — một xâu ký tự có độ dài lớn hơn 4 (tức là ít nhất ký tự).
- Sau đó, nối liên tiếp một số (có thể bằng ) hậu tố hình vị, mỗi hậu tố có độ dài đúng hoặc ký tự.
- Ràng buộc duy nhất: không được nối hai hậu tố giống hệt nhau liên tiếp nhau (kề nhau).
Cho một xâu . Hãy tìm tất cả các xâu phân biệt có độ dài hoặc mà có thể đóng vai trò là một hậu tố hình vị nào đó khi phân tích theo quy tắc trên.
Hai xâu được coi là phân biệt nếu chúng khác độ dài, hoặc tồn tại một vị trí mà ký tự tương ứng khác nhau.
Dữ liệu vào
Một dòng duy nhất chứa xâu gồm các chữ cái tiếng Anh in thường.
Dữ liệu ra
Dòng đầu in số nguyên — số lượng hậu tố phân biệt tìm được.
dòng tiếp theo, mỗi dòng in một hậu tố, sắp xếp theo thứ tự từ điển tăng dần.
Ràng buộc
- .
- chỉ gồm các chữ cái tiếng Anh in thường.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| abacabaca | 3 aca ba ca |
Ví dụ một cách phân tích: gốc = abaca, sau đó nối hậu tố ba, rồi ca. Một cách khác: gốc = abac... không được vì gốc phải dài hơn . Với các cách phân tích hợp lệ, tập hậu tố xuất hiện là aca, ba, ca. |
| abaca | 0 | , vậy gốc chiếm đúng toàn bộ xâu, không còn ký tự nào cho hậu tố. |
Bình luận