- محدودیت زمان: ۲ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
دوره ۱۰۲۸ ایا، دوره ۲۸ ایا را بسیار خفن میپنداشتند(زیرا دوره ۲۸ ایا واقعا خفن بودند). اعتقاد دوره ۱۰۲۸ ایا به خفونت دوره ۲۸ ایا چنان بود که فکر میکردند دوره ۲۸ ایا میتوانستند حتی مساله توقف را حل کنند!
مساله توقف ( به انگلیسی : Halting problem ) مطرح می کند که آیا می توان برنامه ای نوشت که یک برنامه از ورودی بگیرد و تعیین کند که آیا برنامه متوقف می شود یا خیر. ثابت شده که در حالت کلی، الگوریتمی برای حل این مساله وجود ندارد.
مسئول دوره ۱۰۲۸ ایا برای اینکه اعتماد به نفس دوره ۱۰۲۸ ایا تقویت شود، نسخه ساده شدهای از مساله هالت را به آنها داد تا آنها فکر کنند مثل دوره ۲۸ ایا خفن هستند.
در این نسخه ساده شده سه نوع دستور موجود است:
assign a = b + c
cout a
goto l
که در آن $a$ و $b$ و $c$ یک حرف کوچک انگلیسی (که نام یک متغیر است) یا یک عدد یک رقمی هستند و $l$ شماره خطی از برنامه است. تضمین میشود که بعد از assign
متغیر a
همیشه یک حرف کوچک انگلیسی است.
شما باید خط به خط برنامه را دنبال کنید، در صورتی که برنامه پایانناپذیر است، $-1$ را چاپ کنید. در غیر اینصورت خروجی این برنامه را چاپ کنید. در این برنامه cout
به معنای چاپ کردن یک عدد یا یک متغیر است. goto
به معنای پرش به یک خط خاص است (خطها از ۱ شمارهگذاری شدهاند). assign a = b + c
یعنی $b+c$ را در متغیر $a$ قرار بده. هر حرف کوچک انگلیسی نشاندهنده یک متغیر است و محتوای همه متغیرها در ابتدا صفر میباشد.
با توجه به اینکه جواب مسئله ممکن است بزرگ شود شما باید باقی مانده خروجی بر $10^9+7$ را بگویید.
ورودی
در ورودی یک برنامه به شما داده میشود.
در خط اول $n$ تعداد خطهای برنامه و در $n$ خط بعد در هر خط یک دستور از برنامه داده میشود. $$1 \le l \le n \le 100\ 000$$
خروجی
اگر برنامه دادهشده تمام نمیشود، در تنها سطر خروجی $-1$ چاپ کنید.
در غیر اینصورت خروجیهای برنامه (به ازای هر cout
) را چاپ کنید.
مثال
ورودی نمونه ۱
2
assign a = 2 + 2
cout a
خروجی نمونه ۱
4
ورودی نمونه ۲
4
assign a = 1 + 0
cout a
assign a = a + a
goto 2
خروجی نمونه ۲
-1
ورودی نمونه ۳
7
cout 0
goto 5
cout 1
goto 7
cout 2
goto 3
cout 3
خروجی نمونه ۳
0
2
1
3
ارسال پاسخ برای این سؤال