المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۱۶:عملی:سوال ۱۰

تبدیل مربع‌های لاتین

مربع لاتین $n \times n$، یک جدول $n \times n$ است که هر سطر و هر ستون آن حاوی یک جای‌گشت از اعداد $1,2,...,n$ است. سطرها و ستون‌های مربع لاتین را از بالا به پایین و از چپ به راست با 1 تا $n$ شماره‌گذاری می‌کنیم.

ما در این سؤال می‌خواهیم دو مربع لاتین $n \times n$ را به هم تبدیل کنیم. حرکات مجاز برای این تبدیل٬ جابه‌جا کردن دو سطر مربع یا دو ستون آن با هم است. معاوضه‌ی سطر $i$ام با سطر $j$ام را با دستور«$row \ i\ j$» نشان می‌دهیم و معاوضه‌ی ستون $i$ با ستون $j$ را با دستور«$col \ i\ j$».($1 \leq i,j \leq$ )

برنامه‌ای بنویسید که با خواندن دو مربع لاتین از ورودی٬ تشخیص دهد که آیا این دو مربع با دستورهای بالا قابل تبدیل به هم هستند یا نه. در صورتی که تبدیل ممکن نبود٬ در تنها سطر خروجی NO چاپ کنید و در حالت دیگر YES و دنباله‌ای از دستورات که دو مربع را به هم تبدیل می‌کنند٬چاپ کنید.

ورودی

  • در سطر اول٬ عدد $n$ آمده است.
  • در $n$ سطر بعد، در هر سطر $n$ عدد با یک فاصله از هم،آمده‌اند که مربع لاتین مبدأ را مشخص می‌کنند.
  • سپس در $n$ سطر بعد٬در هر سطر $n$ عدد با یک فاصله آمده‌اند که مربع لاتین مقصد را تشکیل می‌دهند.
  • $3 \leq n \leq 200$
  • تعداد دستورات خروجی شما نباید بیش‌تر از $10^8$ عدد دستور باشد.
  • تنها در صورتی نمره‌ی تست‌های NO را می‌گیرد که لااقل از $\frac{1}{4}$ تست‌های YES را درست پاسخ دهید.

خروجی

اگر راه‌حلی وجود نداشت٬ در تنها سطر خروجی٬ بنویسید NO. در غیر این صورت٬ باید در سطر اول رشته YES و در $m$ سطر بعدی در هر سطر یکی از دو نوع دستور «$row \ i\ j$» یا «$col \ i\ j$» را چاپ کنید که با اجرای این دنباله از دستور‌ها بر روی مربع مبدا٬ به مربع مقصد می‌رسیم.

بدیهی است راه‌حل‌های مختلفی برای تبدیل دو مربع وجود دارد و تمامی آن‌ها قابل قبول هستند. توجه کنیدکه لزومی ندارد دنباله‌ی تبدیلات شما٬ کم‌ترین تعداد دستود را داشته باشد.

محدودیت‌ها

  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

ورودي و خروجي نمونه

ورودي نمونه خروجي نمونه
3
1 2 3
3 1 2
2 3 1
3 2 1
1 3 2
2 1 3
Yes‎
2
$row$ 1 2
$col$ 2 3

ابزار صفحه