eolymp
bolt
Try our new interface for solving problems
Məsələlər

Optimal proqram

Optimal proqram

Bildiyiniz kimi, proqram yazmaq göründüyü kimi elə də asan deyildir. Bu proses, sizin proqramlarınızın sürətli işləməsi üçün daha da çətin olur. Bəzən isə onların sürətli olması üçün tutarlı əsaslar vardır. Əməliyyat sistemi və verilənlər bazası kimi bir çox böyük proqram kodunun təkrar-təkrar icra olunacaq və ümumi vaxtın əsas hissəsini "yeyəcək" "məhdud yerləri" vardır. Bir qayda olaraq kodun bu hissəsini assemblerdə yazmaq lazım gəlir, ona görə ki, vaxtda azacıq belə qənaət etmək, xüsusilə də kod milyard dəfə icra olunduğu halda çox vacibdir. Bu məsələdə biz optimal assembler kodunun emalının avtomatlaşdırılması məsələsinə baxacağıq. Giriş/çıxış cütlükləri şəklində verilmiş funksiyaya görə siz bu funksiyaları hesablayan qısa proqram fikirləşməlisiniz. Sizin proqram yalnız \textbf{5} əmri (\textbf{ADD}, \textbf{SUB}, \textbf{MUL}, \textbf{DIV} və \textbf{DUP}) dəstəkləyən stek maşını əsasında işləyəcək. İlk dörd əmr stekin iki üst elementlərini götürür və onları stekdə cəm, fərq, hasil və ya tam bölmə ilə dəyişdirir. \textbf{DUP} əmri stekin yuxarısına stekdəki ən üstdə olan elementin surətini əlavə edir. Bu şəkildə, əgər əmrlər stekə iki üst \textbf{a} və \textbf{b }elementləri ilə qəbul edilirlərsə, onda nəticədə stek növbəti şəkildə görünür: \includegraphics{https://static.e-olymp.com/content/8b/8b313c38caccc4e4e4b83cb783fed5a8f5944453.jpg} Proqram icra olunmağa başlayanda stekdə yalnız bir giriş tam ədədi olacaq. Hesablamanın sonunda stekdə yalnız bir tam ədəd olmalıdır, bu ədəd hesablamanın nəticəsidir. Stek maşını \textbf{3} halda xəta vəziyyətində ola bilər: \begin{itemize} \item Stekin ən üstdəki elementi \textbf{0} olarsa, \textbf{DIV} əmri icra olunmur. \item Stekdə yalnız bir element olarsa, \textbf{ADD}, \textbf{SUB}, \textbf{MUL} və \textbf{DIV} əməliyyatları icra olunmayacaq. \item Əməliyyatın icrası nəticəsində mütləq qiymətcə \textbf{30000}-dən böyük qiymət alırıq. \end{itemize} \InputFile Giriş funksiyaların təsviri sırasından ibarətdir. Hər bir təsvir tam \textbf{n} (\textbf{n} ≤ \textbf{10}) ədədini, giriş/çıxış cütlüklərinin sayını ehtiva edən sətirlə başlayır. Növbəti iki sətir \textbf{n} tam ədədi ehtiva edir -- onlardan hər biri giriş və çıxış ədədlər cütlüklərinin qiymətinə uyğundur. Giriş ədədləri mütləq qiymətcə \textbf{30000}-dən böyük deyildir. Giriş verilənləri \textbf{n = 0} qiyməti ilə tamamlanır. Bu test emal edilmir. \OutputFile Siz elə qısa proqram yazmalısınız ki, \textbf{f} funksiyasını hesablasın -- burada hər bir \textbf{i} \{\textbf{1}, ..., \textbf{n}\} üçün \textbf{f(x_i) = y_i}. Bu o deməkdir ki, proqram girişdə verilmiş \textbf{x} üçün xəta vəziyyətində ola bilməz, buna baxmayaraq o başqa qiymətlər üçün xəta vəziyyətinə girə bilər. Yalnız \textbf{10} verilən qiymətlər cütlüyü olan proqramlara baxacağıq. Hər bir funksiya təsviri üçün əvvəlcə təsvirin nömrəsini verin. Sonra verilmiş funksiyanı hesablamaq üçün qısa proqramı təşkil edən əmrlər ardıcıllığını verin. Əgər belə proqramların sayı bir neçə olarsa, bunlardan leksikoqrafik ən kiçik olanını verin. Funksiyanı hesablayan \textbf{10}-dan artıq əmri olan proqram yoxdursa, "\textbf{Impossible}" sətrini verin. Əgər qısa proqram sıfır əmrindən ibarətdirsə, "\textbf{Empty sequence}" verməli. Müxtəlif test halları arasında boş sətir verin.
Zaman məhdudiyyəti 1 saniyə
Yaddaşı istafadə məhdudiyyəti 64 MiB
Giriş verilənləri #1
4
1 2 3 4
0 -2 -6 -12
3
1 2 3
1 11 1998
1
1998
1998
0
Çıxış verilənləri #1
Program 1
DUP DUP MUL SUB

Program 2
Impossible

Program 3
Empty sequence