336. Иван и opensource

Не решаласьСредняя

В ходе решения рабочей задачи программист Иван написал библиотеку, которая показалась ему полезной и для сообщества. Обсудив детали с руководителем и получив согласие, он решил выложить её в opensource. Но рабочий репозиторий содержит файлы, описывающие внутреннюю кухню, а их, как известно, нельзя выкладывать за пределы монорепозитория компании.

Иван убедился, что на работу библиотеки эти файлы никак не влияют. Поэтому Иван решил автоматически удалить их из библиотеки. У него есть список файлов, относящихся к библиотеке, а также чёрный список, содержащий пути ко внутренним файлам репозитория. Далее Иван собирается удалить все файлы библиотеки, которые находятся в директориях из чёрного списка.

Вам же необходимо написать программу, которая соберёт статистику по удалённым файлам из директорий.

Формат ввода

В первой строке входных данных записано целое число nn (1n100001 \le n \le 10\,000).

В следующих nn строках указаны директории из чёрного списка (могут повторяться). Директорией является или строка /, или строка вида <dir><folder>/, где <dir> — это строка, также являющаяся директорией, а <folder> — это непустая строка из строчных латинских букв, цифр или символа _. Например, /, /abcd/, /_0kda/sasw/ — корректные директории, а /asds, /sds/v.c, /asd//ds/ — некорректные директории.

Затем записано целое число mm (1m100001 \le m \le 10\,000).

В следующих mm строках указаны пути к файлам библиотеки без повторений. Путь к файлу имеет вид <dir><fullName>, где <fullName> является конкатенацией непустых строк <name> и <ext>. Строка <name> состоит из строчных латинских букв, цифр и символа _. Строка <ext> начинается с точки, после которой следуют cc строчных латинских букв (1c3)(1 \le c \le 3). Например, /asd/d.txt, /a.q, /a/b/c/d.efg — корректные пути к файлам, а /asd/d, /a/b/c.d.e — некорректные пути к файлам.

Далее записано целое число qq (1q100001 \le q \le 10\,000) — количество запросов.

В следующих qq строках указаны директории (могут повторяться), на каждую из которых необходимо в дальнейшем собрать статистику.

Суммарно в тестовых данных не более 500000500\,000 символов.

Формат вывода

Для каждого запроса сначала выведите целое число — количество различных расширений файлов, удалённых по этому запросу. Затем для каждого расширения <ext> укажите количество <count> удалённых файлов данного расширения в формате <ext>: <count>. Порядок вывода расширений неважен.

Ограничения

Ограничение времени

5 с

Ограничение памяти

512 МБ

Пример 1

Ввод
2
/project/internal/
/project/docs/
5
/project/docs/internal.md
/project/lib/header.cpp
/project/lib/header.h
/project/bin/main.cpp
/project/internal/secret.h
3
/
/project/internal/
/project/lib/
Вывод
2
.md: 1
.h: 1
1
.h: 1
0

Пример 2

Ввод
2
/lib/folder_1/
/lib/folder_2/folder_3/
7
/lib/a.cpp
/lib/folder_2/b.cpp
/lib/folder_1/c.cpp
/lib/folder_2/folder_4/d.cpp
/lib/folder_1/folder_5/e.cpp
/lib/folder_2/folder_3/folder_6/f.py
/lib/folder_2/folder_3/g.cpp
3
/lib/
/lib/folder_1/
/lib/folder_2/
Вывод
2
.cpp: 3
.py: 1
1
.cpp: 2
2
.py: 1
.cpp: 1

Теги

Нужно войти, чтобы отправить решение.Войти