eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

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

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

Граф называется двудольным, если его множество вершин \textbf{V} можно разбить на два непересекающихся множества вершин \textbf{A} и \textbf{B}, так чтобы концы любого ребра в этом графе находились в разных множествах. Паросочетанием в графе называется подмножество \textbf{S} множества ребер \textbf{E} этого графа, не имеющих общих вершин (для любых ребер \textbf{e_\{1 \}= (u_1, v_1)} и \textbf{e_\{2 \}= (u_2, v_2)}, лежащих в \textbf{S}, выполнено \textbf{u_\{1 \}= u_2}, \textbf{u_\{1 \}= v_2}, \textbf{v_\{1 \}= u_2} и \textbf{v_\{1 \}= v_2}). Ваша задача найти максимальное паросочетание в заданном двудольном графе. Максимальным называется паросочетание, состоящее из максимального количества ребер. \InputFile Первая строка входного файла содержит два целых числа \textbf{N} и \textbf{M} (\textbf{1} ≤ \textbf{N}, \textbf{M} ≤ \textbf{250}) - количество вершин во множествах \textbf{A} и \textbf{B} соответственно. Следующие \textbf{N} строк содержат описания ребер графа. В \textbf{(i+1)}-й строке содержится список вершин множества \textbf{B}, соединенных с \textbf{i}-й вершиной множества \textbf{A}. Список оканчивается числом \textbf{0}. Нумерация вершин в множествах \textbf{A} и \textbf{B} независимая (вершины нумеруются c \textbf{1}). \OutputFile Первая строка выходного файла должна содержать одно целое число \textbf{L} - количество ребер в максимальном паросочетании. Каждая из следующих \textbf{L} строк должна содержать описание одного ребра паросочетания - два целых числа \textbf{u_i} и \textbf{v_i} (номер вершины в множестве \textbf{A} и номер вершины в множестве \textbf{B}).
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
2 2
1 2 0
2 0
Выходные данные #1
2
1 1
2 2