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} незалежна (вершини нумеруються з \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