Число строк после соединения заявок

тема: Связывание таблиц · уровень: средний

Условие

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

Нужно выполнить внутреннее соединение таблиц по полю subscriber_id. Каждая строка заявок с идентификатором x соединяется с каждой строкой снимков договоров с тем же идентификатором x.

Строка с пропущенным идентификатором обозначается символом -. Пропуски не соединяются ни с какими строками, в том числе друг с другом. Если a_x — число заявок с идентификатором x, а b_x — число снимков договоров с идентификатором x, то число строк результата равно сумме Σ a_x · b_x по всем идентификаторам x, кроме -. Выведите это число. Округление не требуется: выводится точное целое число. Правило выбора при равенстве не требуется, так как выводится только одно числовое значение.

Формат ввода

В первой строке даны два целых числа n и m — число заявок и число снимков договоров.

В следующих n строках содержатся два значения: ticket_id и subscriber_id — номер заявки и идентификатор её абонента.

В следующих m строках содержатся два значения: snapshot_id и subscriber_id — номер снимка договора и идентификатор абонента. Значение subscriber_id равно -, если идентификатор отсутствует.

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

Выведите одно целое число — количество строк внутреннего соединения заявок и снимков договоров по полю subscriber_id.

Ограничения

1 ≤ n, m ≤ 2000.

n + m ≤ 2000.

1 ≤ ticket_id, snapshot_id ≤ 10^9.

Каждый номер заявки уникален среди строк заявок, каждый номер снимка уникален среди строк снимков.

subscriber_id — либо символ -, либо строка из строчных латинских букв и цифр длиной от 1 до 20.

Пропуски допустимы в обеих таблицах и не участвуют в соединении. Таблица с некоторым идентификатором может не иметь строк в другой таблице: её вклад в ответ равен нулю.

Решить задачу с автопроверкой на Python →

Куда дальше