Cho một X xâu ký tự độ dài ~n~ chỉ gồm các ký tự là chữ cái thường, chữ cái in hoa và số. Ngoài ra, cho tập hợp m xâu có độ dài bằng nhau và bằng k, trong đó ~(n = m * k)~. Cho biết có thể ghép m xâu này (mỗi xâu dùng đúng một lần) liền nhau để tạo thành một xâu bằng xâu X được không, nếu có hãy in ra thứ tự ghép của các xâu trong tập hợp. Nếu có nhiều cách xếp thứ tự hãy xếp thứ tự sao cho dãy kết quả có thứ tự từ điển nhỏ nhất.
Hai dãy có cùng độ dài A = ~a_1, a_2, a_3, ..., a_m~ và B = ~b_1, b_2, b_3, ..., b_m~, dãy A có thứ tự từ điển nhỏ hơn dãy B nếu tại vị trí i đầu tiên mà ~a_i \ne b_i~ thì ~a_i < b_i~ nói cách khác tồn tại một vị trí i sao cho ~a_i < b_i~ và ~a_j = b_j \forall j < i~ .
Input
Dòng đầu tiên gồm một xâu duy nhất ~X~ ~(0 < |x| \le 5.10^5)~
Dòng thứ hai gồm một số nguyên ~m~, số lượng xâu trong tập hợp ~(1 \le m \le |X|)~
~m~ dòng tiếp theo mỗi dòng là một xâu thuộc tập hợp đã cho, ~m~ xâu này có cùng độ dài k thỏa mãn ~k * m = |X|~
Output
Nếu không có cách ghép xâu in ra "NO", ngược lại in ra ~1~ dòng duy nhất là dãy kết quả gồm ~m~ phần tử là thứ tự của các xâu trong cách ghép thỏa mãn, nếu tồn tại nhiều dãy kết quả in ra dãy kết quả có thứ tự từ điển nhỏ nhất.
Sample Input
conluacon
3
con
con
lua
Sample Output
1 3 2
Giải thích tập hợp xâu S là [con, con, lua] xếp ~S_1~ vào làm xâu thứ nhất, xếp ~S_2~ làm xâu thứ 3 và xếp ~S_3~ làm xâu thứ 2 ta đươc kết quả là conluacon
Bình luận