해커

S부터 t까지의 문자열 중 t의 롤링 해시값과 같은 문자열이 정확히 K개가 되는 첫 t를 찾아, 그 K개를 사전순으로 출력한다.

보통6해시맵수학구현아직 제출이 없습니다시간 제한0.5초메모리 제한128 MB

문제

브루노는 단어를 수로 바꾸려고 롤링 해시를 쓴다.

알고리즘은 이렇게 동작한다.

  1. 해시를 00에서 시작한다.
  2. 문자열의 문자를 앞에서부터 하나씩 보면서, 현재 해시에 PP를 곱하고 그 문자의 알파벳 순번(11부터 2626까지)을 더한다.
  3. 이렇게 얻은 값을 MM으로 나눈 나머지가 최종 해시다.

이반은 영어 소문자로만 이루어진 길이 NN짜리 문자열을 사전순으로 모두 적은 목록을 구했다. 그런데 종이가 찢어져서 문자열 SS로 시작해 zz...z\texttt{zz...z}로 끝나는 부분만 남았다.

이반은 남은 목록에서 해시가 같은 서로 다른 문자열 KK개를 찾으려 한다. 브루노의 알고리즘을 망가뜨리려는 이반의 계획을 도와라.

입력

첫째 줄에 문제에서 설명한 자연수 PP, MM이 주어진다. (1P,M1000001 \le P, M \le 100000)

둘째 줄에 목록에 있는 문자열의 길이 NN이 주어진다. (1N1000001 \le N \le 100000)

셋째 줄에 남은 목록의 첫 문자열 SS가 주어진다. 길이는 NN이고 영어 소문자로만 이루어져 있다.

넷째 줄에 이반이 원하는 문자열의 개수 KK가 주어진다. (1K201 \le K \le 20)

출력

답은 다음 규칙으로 하나로 정한다. 남은 목록을 SS부터 사전순으로 훑어보면서, 문자열 tt까지 봤을 때 SS부터 tt까지 중 해시가 tt와 같은 문자열이 처음으로 KK개가 되면 거기서 멈춘다. 이때 해시가 tt와 같은 그 KK개를 사전순으로 한 줄에 하나씩 출력한다. 마지막 줄은 tt가 된다.

목록 끝까지 가도 해시가 같은 문자열이 KK개인 값이 없으면 NEMOGUCE\texttt{NEMOGUCE} 한 단어만 출력한다.