메가넷 검색 챔피언십
시간 제한1초메모리 제한1024 MB
최대 50,000개의 주소 필터(앞부분 * 서버 와일드카드와 뒷부분 /* 섹션 와일드카드 포함)와 50,000개의 주소가 주어질 때, 각 주소가 몇 개의 필터와 일치하는지 센다.
문제
메가넷 검색 세계 선수권 대회를 열기 위해 주최자는 일부 주소에 대한 접근을 제한하려 한다. 메가넷의 주소는 서버 이름과 섹션 이름으로 이루어진 문자열이다.
서버 이름은 1개 이상 5개 이하의 부분으로 이루어진 문자열이다. 각 부분은 라틴 소문자로만 이루어진 비어 있지 않은 문자열이다. 부분들은 점으로 구분된다. 올바른 서버 이름의 예: «a», «ab.cd», «abacaba», «a.b.c.d.e».
섹션 이름은 비어 있거나 1개 이상 5개 이하의 부분을 포함하는 문자열이다. 각 부분은 «/» 문자로 시작하고 그 뒤에 하나 이상의 라틴 소문자가 온다. 올바른 섹션 이름의 예: «», «/a», «/aba», «/a/b/c/d/e».
주소는 서버 이름 뒤에 섹션 이름을 붙여 만든다. 예를 들어 «a», «aba/d/f/g/h», «a.b», «aba.caba/def/g», «c.d.e.f.g/a/b/c/d/e»는 올바른 주소이다.
메가넷의 일부 주소에 대한 접근을 제한하기 위해 대회 주최자는 여러 필터를 준비했다. 필터는 주소와 마찬가지로 서버 필터와 섹션 필터의 두 부분으로 이루어진다.
서버 필터는 서버 이름으로 이루어지며, 그 앞에 «*.» 문자열이 올 수도 있다. 서버 필터가 서버 이름만으로 이루어진 경우, 이 필터에는 이름이 정확히 같은 서버만 대응된다. 서버 필터가 «*.S » 형태의 문자열이고 S가 서버 이름인 경우, 이 필터에는 이름에서 앞의 0개 이상의 부분을 지워 S를 얻을 수 있는 서버가 대응된다.
마찬가지로 섹션 필터는 섹션 이름으로 이루어지며, 그 뒤에 «/*» 문자열이 올 수도 있다. 섹션 이름 R로만 이루어진 섹션 필터에는 R과 정확히 일치하는 섹션만 대응된다. 섹션 필터가 «R/*» 형태의 문자열인 경우, 이 필터에는 이름에서 뒤의 0개 이상의 부분을 지워 R을 얻을 수 있는 모든 섹션이 대응된다.
주소는 서버 이름이 서버 필터에 대응되고 섹션 이름이 섹션 필터에 대응되면 그 필터에 대응된다.
필터와 그에 대응되는 주소의 예는 아래 표에 있다.
주어진 필터 집합과 주소 목록이 있을 때, 각 주소가 몇 개의 필터에 대응되는지 구하는 프로그램을 작성해야 한다.
입력
입력 파일의 첫 번째 줄에는 두 정수 n과 p가 주어진다. n은 필터의 개수(1 ≤ n ≤ 50 000)이고 p는 부분 문제의 번호(0 ≤ p ≤ 3)이다.
다음 n개 줄에는 필터가 한 줄에 하나씩 주어진다. 각 필터는 위에서 설명한 제약을 만족한다.
그다음 줄에는 정수 k가 주어진다. k는 필터에 대응되는지 확인해야 하는 주소의 개수이다(1 ≤ k ≤ 50 000).
다음 k개 줄에는 주소가 한 줄에 하나씩 주어진다. 각 주소는 위에서 설명한 제약을 만족한다.
입력 파일의 각 줄 길이는 50자를 넘지 않는다.
입력 파일의 전체 크기는 4메가바이트를 넘지 않는다.
출력
출력 파일에는 k개의 정수가 한 줄에 하나씩 있어야 한다. 각 주소마다 그 주소가 대응되는 필터의 개수를 출력한다.
힌트
첫 번째 예제의 필터에는 «*» 문자가 없으므로, 주소는 완전히 일치하는 경우에만 필터에 대응된다.
두 번째 예제에서는 필터가 중복될 수 있다는 점, 그리고 «*.<서버>/…» 형태의 필터에는 서버 이름의 일부가 필터의 해당 부분과 완전히 일치하는 주소도 대응된다는 점에 주의해야 한다. 마찬가지로 «…/<섹션>/*» 형태의 필터에는 섹션 이름의 일부가 필터의 해당 부분과 완전히 일치하는 주소도 대응된다.
주의! 예제의 첫 번째 테스트는 부분 문제 1의 제약을 만족하지 않고, 예제의 두 번째 테스트는 부분 문제 1과 2의 제약을 만족하지 않는다. 그래도 참가자가 위에 나온 부분 문제 중 하나만 맞히는 것을 목표로 하더라도, 두 예제 테스트 모두에서 올바른 답을 출력해야만 풀이가 채점된다.