• محدودیت زمان: ۱۰ ثانیه (برای تمامی زبان‌های برنامه‌نویسی)
  • محدودیت حافظه: ۵۱۲ مگابایت (برای تمامی زبان‌های برنامه‌نویسی)

یک گراف ساده (گرافی بدون جهت و بدون وزن و بدون یال چندگانه و بدون طوقه) به شما داده می‌شود. شما باید کم‌ترین تعداد یال ممکن را از گراف حذف کنید و کم‌ترین تعداد یال ممکن را به گراف اضافه کنید، تا این گراف تبدیل به یک درخت (گراف هم‌بند بدون دور) بشود.

رئوس گراف با اعداد طبیعی از \(1\) تا \(n\) شماره‌گذاری شده‌اند.

ورودی

در اولین خط ورودی دو عدد \(n\) و \(m\) با یک فاصله بینشان آمده‌است که به ترتیب تعداد رئوس و یال‌های گراف را نشان می‌دهد. \[1 \leq n \leq 2000\] \[0 \leq m \leq \frac{n(n - 1)}{2}\]

در ادامه \(m\) خط در ورودی آمده‌است. در \(i\)امین خط از \(m\) خط بعدی، دو عدد طبیعی \(x_i\) و \(y_i\) نابرابر با یک فاصله بینشان آمده‌است که نشان می‌دهد یال \((x_i, y_i)\) در گراف وجود دارد.

به ازای هر \(i\) معتبر داریم: \[ 1 \leq x_i, y_i \leq n \] \[ x_i \neq y_i \]

خروجی

در اولین خط، اول \(a\) (تعداد یال‌های لازم برای حذف شدن از گراف) و سپس \(b\) (تعداد یال‌های لازم برای اضافه شدن به گراف) را با یک فاصله چاپ کنید. در هر یک از \(a\) خط بعدی، شماره‌ی رئوس دو سر هر یالی که لازم است از گراف حذف شود را با یک فاصله چاپ کنید. سپس در هر یک از \(b\) خط بعدی، شماره‌ی رئوس دو سر هر یالی که لازم است به گراف اضافه شود را با یک فاصله چاپ کنید.

مثال

ورودی نمونه ۱

3 2
1 2
2 3

خروجی نمونه ۱

0 0

ورودی نمونه ۲

3 3
1 2
2 3
3 1

خروجی نمونه ۲

1 0
1 3

ورودی نمونه ۳

4 0

خروجی نمونه ۳

0 3
1 2
2 3
3 4

نکات

  • هر جواب دلخواهی که گراف ورودی را تبدیل به یک درخت بکند معتبر خواهد بود، ترتیب چاپ کردن یال‌های خروجی مهم نیست، فقط دقت کنید که مقدار \(a+b\) باید کمینه باشد، یعنی مجموع تعداد یال‌های حذف‌شده و یال‌های اضافه‌شده باید کمینه باشد.
ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.