해커
시간 제한1초메모리 제한128 MB
알려진 모든 매개변수와 모든 악성 값을 최소 개수의 URL로 커버하되, 매개변수를 최대 P개씩 묶는 규칙에 따라 URL 목록을 출력한다.
문제
미르코는 최근 해커로 취직했다. 상사에게 받은 첫 업무는 사무실 웹사이트에서 자주 일어나는 오류를 자동으로 찾아내는 도구를 만드는 것이다.
웹 페이지 주소(URL)는 주소와 쿼리 두 부분으로 이루어진다.
주소는 http://로 시작하는 문자열이고 나머지 부분은 영문 대소문자, 점 ., 슬래시 /로 이루어진다. 주소와 쿼리는 물음표 ?로 구분하며 물음표는 URL에 정확히 한 번 나타난다. 쿼리는 하나 이상의 매개변수로 이루어진다. 각 매개변수는 이름과 값의 순서쌍이고 둘은 등호 =로 구분한다. 매개변수 이름은 항상 영문 소문자로 이루어진 문자열이다. 매개변수 값은 영문 대소문자, 숫자, 공백 (ASCII 32)으로 이루어진 문자열이다. 한 쿼리에 여러 매개변수가 올 수 있으며 매개변수끼리는 &로 구분한다. 한 쿼리에 이름이 같은 매개변수가 두 번 나타날 수는 없다.
해커는 매개변수 값을 바꿔서 웹 페이지에 허가되지 않은 접근을 시도하곤 한다. 미르코는 주어진 URL과 자주 쓰이는 악성 값으로 새 URL 목록을 만들어야 한다. 새 목록에서 알려진 매개변수 각각은 모든 악성 값과 적어도 한 번씩 함께 호출되어야 한다. 알려진 매개변수란 입력 URL 가운데 하나 이상에 나타나는 매개변수 이름이다. 오류를 찾기 쉽도록 미르코는 한 쿼리에 매개변수를 최대 개까지만 쓸 수 있다. URL 하나를 불러오는 데 몇 초씩 걸리므로 전체 URL 개수는 가능한 한 적어야 한다.
입력
첫째 줄에 세 자연수 , , 가 주어진다.
- (): 주어지는 URL의 개수
- (): 미르코가 URL 하나에 쓸 수 있는 매개변수의 최대 개수
- (): 자주 쓰이는 악성 값의 개수
다음 개의 줄에 URL이 하나씩 주어진다. 모든 URL의 주소는 같다. 모든 URL은 위에서 설명한 형식을 따른다. 각 URL의 길이는 250자 이하이고 매개변수가 적어도 하나 있다.
다음 개의 줄에 악성 값이 한 줄에 하나씩 주어진다. 각 악성 값의 길이는 25자 이하이며 올바른 매개변수 값이다. 악성 값은 공백으로 시작하거나 끝날 수 있다.
출력
알려진 매개변수 각각이 모든 악성 값과 적어도 한 번씩 함께 호출되도록 URL 목록을 출력한다. 한 줄에 URL을 하나씩 출력한다. URL에는 알려진 매개변수와 악성 값만 쓸 수 있다.
조건을 만족하는 목록은 여러 가지일 수 있으므로 다음 규칙으로 만든 목록을 출력한다. 이 규칙으로 만든 목록은 URL 개수가 가장 적다.
- 알려진 매개변수 이름의 개수를 라 하고 이름을 사전 순으로 정렬한다.
- 악성 값을 입력 순서대로 보면서 각 값을 정렬한 이름과 차례로 짝짓는다. 그러면 (이름, 값) 쌍 개가 한 줄로 늘어선다.
- 이 쌍을 앞에서부터 개씩 묶는다. 마지막 묶음은 이보다 적을 수 있다.
- 묶음 하나마다 URL을 하나 출력한다. URL은 입력 URL의 주소,
?, 그리고 묶음의 쌍을 순서대로이름=값꼴로 써서&로 이어 붙인 쿼리를 차례로 붙인 것이다.