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

Match them up

Match them up

У цій задачі вам доведеться шукати максимальне паросполучення. І не просте, а лексикографічно мінімальне. Задано двохдольний граф з \textbf{N} вершин у лівій долі, \textbf{N} вершин у правій долі і \textbf{K} ребер між ними. Максимальне паросполучення --- максимальна за потужністю підмножина ребер графа \textbf{M}, така, що довільна вершина графа інцидентна не більше ніж одному ребру з \textbf{M}. Нехай множинао ребер \{(\textbf{u_i}, \textbf{v_i})\} --- максимальне паросполучення, де \textbf{u_i} --- вершини з лівої долі, \textbf{v_i} ---вершини з правої долі. Випишемо усі вершини в одну послідовність у порядку: \textbf{u_1}, \textbf{v_1}, \textbf{u_2}, \textbf{v_\{2 \}},..., \textbf{u_m}, \textbf{v_m}. Знайдіть максимальне паросполучення з лексикографічно мінімальною такою послідовністю вершин. \InputFile У першому рядку два числа \textbf{N} і \textbf{K} --- кількість вершин у кожній з долей та кількість ребер. Далі \textbf{K} рядків з описом ребер. Кожне ребро описується парою чисел \textbf{a_i} та \textbf{b_i}, де \textbf{a_i} --- вершина з лівої долі, а \textbf{b_i} --- з правої долі. \OutputFile У першому рядку виведіть розмір максимального паросполучення \textbf{m}. Далі \textbf{m} рядків по два числа \textbf{u_i}, \textbf{v_i} у кожному, де \textbf{u_i} --- вершина з лівої долі, а \textbf{v_i} --- вершина з правої долі, яка відповідає \textbf{i}-ому ребру паросполучення. \textbf{Обмеження} \textbf{1} ≤ \textbf{N} ≤ \textbf{10^3} \textbf{0} ≤ \textbf{K} ≤ \textbf{10^5} \textbf{1} ≤ \textbf{a_i}, \textbf{b_i} ≤ \textbf{N}
Ліміт часу 1.5 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
3 5
1 2
1 3
3 2
2 3
2 1
Вихідні дані #1
3
1 3
2 1
3 2