만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

해커

시간 제한1초메모리 제한128 MB

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

보통10점 중 5점

유형
구현, 문자열, 그리디, 정렬
정답자
아직 제출이 없습니다

문제

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

웹 페이지 주소(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 (1≤N≤1001 \le N \le 100): 주어지는 URL의 개수
  • PP (1≤P≤101 \le P \le 10): 미르코가 URL 하나에 쓸 수 있는 매개변수의 최대 개수
  • ZZ (1≤Z≤301 \le Z \le 30): 자주 쓰이는 악성 값의 개수

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

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

출력

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

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

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

예제2

  1. 예제 1

    입력
    1 2 2
    http://www.com/a.php?a=1&b=2&c=0
    X
    Y
    
    예상 출력
    http://www.com/a.php?a=X&b=X
    http://www.com/a.php?c=X&a=Y
    http://www.com/a.php?b=Y&c=Y
    
  2. 예제 2

    입력
    3 1 2
    http://a.com/b.xtm?a=1&b=2
    http://a.com/b.xtm?a=2&c=5
    http://a.com/b.xtm?b=5&c=13
    OR 1 IS 1
    FALSE
    
    예상 출력
    http://a.com/b.xtm?a=OR 1 IS 1
    http://a.com/b.xtm?b=OR 1 IS 1
    http://a.com/b.xtm?c=OR 1 IS 1
    http://a.com/b.xtm?a=FALSE
    http://a.com/b.xtm?b=FALSE
    http://a.com/b.xtm?c=FALSE