Контест Middle Сборка и линковка обновлено

Какие файлы перекомпилировать после изменения заголовков

Условие

Проект состоит из файлов .cpp и .h. Для каждого файла известен список файлов, которые он включает напрямую через #include (заголовки могут включать другие заголовки, циклов нет). Изменили несколько файлов. Единицу трансляции (.cpp) нужно перекомпилировать, если изменился она сама или любой заголовок, включённый в неё прямо или через цепочку.

Ввод: n (1 ≤ n ≤ 2000), затем n строк имя k зав₁ … зав_k (все зависимости это заголовки, перечисленные среди файлов). Затем k (1 ≤ k ≤ n) и строка с именами изменённых файлов.

Вывод: число .cpp, которые надо перекомпилировать, и во второй строке их имена по возрастанию (по кодам символов); если таких нет, вторая строка пустая.

Пример 1

Ввод:

4
main.cpp 1 util.h
util.h 1 base.h
base.h 0
net.cpp 1 base.h
1
base.h

Вывод:

2
main.cpp net.cpp

Пример 2

Ввод:

2
a.cpp 0
b.cpp 0
1
a.cpp

Вывод:

1
a.cpp

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.