해커

알려진 모든 매개변수와 모든 악성 값을 최소 개수의 URL로 커버하되, 매개변수를 최대 P개씩 묶는 규칙에 따라 URL 목록을 출력한다.

보통5구현문자열그리디정렬아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

미르코는 최근 해커로 취직했다. 상사에게 받은 첫 업무는 사무실 웹사이트에서 자주 일어나는 오류를 자동으로 찾아내는 도구를 만드는 것이다.

웹 페이지 주소(URL)는 주소와 쿼리 두 부분으로 이루어진다.

주소쿼리
http://www.hsin.hr/stud/index.phptim=1&kategorija=pero laka&f=14

주소는 http://로 시작하는 문자열이고 나머지 부분은 영문 대소문자, 점 ., 슬래시 /로 이루어진다. 주소와 쿼리는 물음표 ?로 구분하며 물음표는 URL에 정확히 한 번 나타난다. 쿼리는 하나 이상의 매개변수로 이루어진다. 각 매개변수는 이름과 값의 순서쌍이고 둘은 등호 =로 구분한다. 매개변수 이름은 항상 영문 소문자로 이루어진 문자열이다. 매개변수 값은 영문 대소문자, 숫자, 공백 (ASCII 32)으로 이루어진 문자열이다. 한 쿼리에 여러 매개변수가 올 수 있으며 매개변수끼리는 &로 구분한다. 한 쿼리에 이름이 같은 매개변수가 두 번 나타날 수는 없다.

해커는 매개변수 값을 바꿔서 웹 페이지에 허가되지 않은 접근을 시도하곤 한다. 미르코는 주어진 URL과 자주 쓰이는 악성 값으로 새 URL 목록을 만들어야 한다. 새 목록에서 알려진 매개변수 각각은 모든 악성 값과 적어도 한 번씩 함께 호출되어야 한다. 알려진 매개변수란 입력 URL 가운데 하나 이상에 나타나는 매개변수 이름이다. 오류를 찾기 쉽도록 미르코는 한 쿼리에 매개변수를 최대 PP개까지만 쓸 수 있다. URL 하나를 불러오는 데 몇 초씩 걸리므로 전체 URL 개수는 가능한 한 적어야 한다.

입력

첫째 줄에 세 자연수 NN, PP, ZZ가 주어진다.

  • NN (1N1001 \le N \le 100): 주어지는 URL의 개수
  • PP (1P101 \le P \le 10): 미르코가 URL 하나에 쓸 수 있는 매개변수의 최대 개수
  • ZZ (1Z301 \le Z \le 30): 자주 쓰이는 악성 값의 개수

다음 NN개의 줄에 URL이 하나씩 주어진다. 모든 URL의 주소는 같다. 모든 URL은 위에서 설명한 형식을 따른다. 각 URL의 길이는 250자 이하이고 매개변수가 적어도 하나 있다.

다음 ZZ개의 줄에 악성 값이 한 줄에 하나씩 주어진다. 각 악성 값의 길이는 25자 이하이며 올바른 매개변수 값이다. 악성 값은 공백으로 시작하거나 끝날 수 있다.

출력

알려진 매개변수 각각이 모든 악성 값과 적어도 한 번씩 함께 호출되도록 URL 목록을 출력한다. 한 줄에 URL을 하나씩 출력한다. URL에는 알려진 매개변수와 악성 값만 쓸 수 있다.

조건을 만족하는 목록은 여러 가지일 수 있으므로 다음 규칙으로 만든 목록을 출력한다. 이 규칙으로 만든 목록은 URL 개수가 가장 적다.

  1. 알려진 매개변수 이름의 개수를 KK라 하고 이름을 사전 순으로 정렬한다.
  2. 악성 값을 입력 순서대로 보면서 각 값을 정렬한 이름과 차례로 짝짓는다. 그러면 (이름, 값) 쌍 KZK \cdot Z개가 한 줄로 늘어선다.
  3. 이 쌍을 앞에서부터 min(P,K)\min(P, K)개씩 묶는다. 마지막 묶음은 이보다 적을 수 있다.
  4. 묶음 하나마다 URL을 하나 출력한다. URL은 입력 URL의 주소, ?, 그리고 묶음의 쌍을 순서대로 이름=값 꼴로 써서 &로 이어 붙인 쿼리를 차례로 붙인 것이다.