Hệ thống gợi ý nickname

Xem dạng PDF

Gửi bài giải

Điểm: 0,65 (OI)
Giới hạn thời gian: 1.5s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

To read the problem statement in English, choose the language using the flag on the navigation bar.

Lộc thích màu lam đậm, nên lần đầu tiên mà Lộc đăng kí tài khoản trên một trang Online Judge giấu tên, Lộc đã quyết định sử dụng nickname darkcyan. Buồn thay, nickname này đã được sử dụng. Vì nickname bị trùng lặp, hệ thống có gợi ý Lộc sử dụng các nickname khác như darkcyan_no1, darkcyan_prodarkcyan_vip, tuy nhiên Lộc không thích các nickname đó. Sau một hồi đắn đo suy nghĩ, nickname mà Lộc chọn là darkkcyan, rất gần với nickname ban đầu, nhưng kí tự k được nhân đôi lên. Và thật may mắn là nickname này chưa tồn tại! Nickname này đã được Lộc sử dụng cho hệ thống này cũng như trên nhiều nền tảng khác nhau.

Lộc nhận thấy rằng việc thay đổi nickname như thế thật là thú vị, và có thể áp dụng ý tưởng này để tạo ra một hệ thống gợi ý nickname hoàn toàn mới! Cụ thể, với một nickname được biểu diễn bởi xâu gồm ~k~ kí tự ~t_1 t_2 \ldots t_k~, hệ thống có thể biến đổi nickname sử dụng theo tác sau một số lần (có thể là 0 lần):

  • Hệ thống chọn ra một số nguyên ~i~ (~1 \le i \le k~) tùy ý, và chèn một kí tự ~t_i~ vào ngay sau vị trí ~i~. Kí tự mới có chỉ số là ~i + 1~ và các kí tự sau đó có chỉ số được tăng lên một. Độ dài của nickname mới sẽ là ~k + 1~.

Ví dụ, với nickname darkcyan, với một thao tác có thể tạo ra xâu darkkcyan, ddarkcyan, và darkcyann, và với ba thao tác có thể tạo ra xâu ddaarrkcyan, darkkkkcyan hoặc ddarkkcyann.

Để đảm bảo độ tối ưu, hệ thống cần biến đổi nickname với số thao tác biến đổi ít nhất, sao cho nickname sau khi biến đổi chưa tồn tại trong hệ thông, để gợi ý cho người dùng.

Lộc nghĩ rằng sẽ thật đáng tiếc nếu như không có hệ thống gợi ý nickname trùng lặp nào sử dụng ý tưởng này. Do đó Lộc quyết định áp dụng luôn hệ thống gợi ý nickname này cho mạng xã hội Virtual Network for Online Intercommunication (VNOI) mà mình đang tham gia phát triển. Hiện tại trên mạng xã hội VNOI đã có ~n~ người dùng, và người dùng thứ ~i~ có nickname là xâu kí tự ~S_i~. Lộc muốn biết rằng, với mỗi nickname ~S_i~, nếu nếu như có một người dùng mới khi đăng kí hệ thống sử dụng nickname trùng với nickname này, vậy cần ít nhất bao nhiêu thao tác biến đổi nickname này để tạo ra một nickname chưa được sử dụng trên VNOI. Vì Lộc vẫn đang bận phát triển thành phần khác của hệ thống, nên Lộc muốn nhờ các bạn giải quyết bài toán này.

Cho danh sách nickname của ~n~ người dùng trên hệ thống, yêu cầu với mỗi nickname ~S_i~, cần in ra số lượng thao tác biến đổi ít nhất để biến đổi nickname ~S_i~ thành một nickname mới chưa tồn tại trên hệ thống.

Input

Dòng đầu tiên chứa số nguyên ~n~ (~1 \le n \le 10^6~) là số lượng người dùng mạng xã hội VNOI.

Dòng thứ ~i~ trong ~n~ dòng tiếp theo chứa xâu ~S_i~ (~1 \le |S_i| \le 10^6~, ~S_i~ chỉ chứa các kí tự tiếng Anh in thường) là nickname của người dùng thứ ~i~ trên hệ thống.

Dữ liệu đảm bảo tổng độ dài của tất cả các nickname trên hệ thống không quá ~10^6~ và không tồn tại hai nickname nào giống nhau.

Output

In ra ~n~ dòng. Dòng thứ ~i~ là số lượng thao tác biến đổi ít nhất để biến đổi nickname ~S_i~ thành một nickname mới chưa tồn tại trên hệ thống.

Scoring

  • Subtask 1, tương ứng với ~55~ điểm, các kí tự trong cùng một nickname là giống nhau.

  • Subtask 2, tương ứng với ~75~ điểm, không có ràng buộc gì thêm.

Tộng cộng bài toán có ~130~ điểm.

Sample Input 1

3
aaa
a
aa

Sample Output 1

1
3
2

Sample Input 2

3
ab
aab
abb

Sample Output 2

2
1
1

Bình luận

Hãy đọc nội quy trước khi bình luận.


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