EduBrick

A. Паросочетание

2000 мс · 256 МБ · всё или ничего

Граф называется двудольным, если его вершины разбиты на две доли AA и BB, а каждое ребро соединяет вершину из AA с вершиной из BB.

Паросочетание — набор рёбер, попарно не имеющих общих вершин. Нужно найти паросочетание с наибольшим числом рёбер и вывести его.

Формат ввода

В первой строке nn и mm (1≤n,m≤5001 \le n, m \le 500) — размеры долей AA и BB. Вершины в долях нумеруются независимо с единицы.

В следующих nn строках описаны рёбра: в ii-й строке перечислены номера вершин доли BB, соединённых с ii-й вершиной доли AA. Список завершается числом 00. Кратных рёбер нет, всего рёбер не больше 10510^5.

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

В первой строке выведите ll — количество рёбер в максимальном паросочетании. В следующих ll строках выведите по два числа: концы ребра в AA и в BB. Рёбра можно выводить в любом порядке.

Примеры

ввод
2 2
1 2 0
2 0
вывод
2
1 1
2 2
ввод
1 1
0
вывод
0
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.