Professor İvanovun alqoritmi#5616

Professor İvanovun alqoritmi

1 saniyə
64 meqabayt
Çox asan

Professor İvanov Professor Petrov'a yeni bir sıralama algoritmasından danışdı. Bu algoritm aşağıdakı funksiyası əsasında qurulub.

[ function change(a: integer); ] [ begin ] [ for j := 0 to n - 1 do ] [ begin ] [ if p_j = a then ] [ k := j ] [ end ] [ swap(k, (k + p_k) n); ] [ end; ]

\textbf{swap}(i, j) funksiyası p_i və p_j elementlərinin yerlərini dəyişir.

Professor İvanov iddia edir ki, p_0, \ldots, p_{n-1} ədədlərindən -dən -ə qədər olan istənilən permutasiyanı bir neçə dəfə funksiyasını çağıraraq artan sıra ilə sıralamaq olar. Bunun üçün hər bir çağırışda arqumentini ilə arasında düzgün seçmək lazımdır.

Professor Petrov həmkarına inanır, lakin alqoritmin işini tam başa düşmədi. Buna görə o, p_0, \ldots, p_{n-1} permutasiyasını təklif etdi və Professor İvanovdan onu funksiyasının köməyi ilə artan qaydada sıralamağını xahiş etdi.

Giriş

Birinci sətrdə (1 \leq n \leq 500) tam ədədi verilir. İkinci sətrdə Professor Petrov tərəfindən təklif olunan p_0, \ldots, p_{n-1}, -dən -ə qədər olan ədədlərin permutasiyası verilir.

Çıxış

Əgər Professor İvanov verilmiş permutasiyanı funksiyası ilə sıralaya bilməzsə, **"Impossible"** çap edin. Əks halda, birinci sətrdə (0 \leq m \leq 10^6) — funksiyanın çağırışlarının sayını yazın. Növbəti sətrdə hər bir çağırış üçün istifadə olunacaq arqumentini (1 \leq a \leq n) yazın. Zəmanət verilir ki, əgər permutasiya sıralana bilirsə, bunu 10^6 çağırışdan çox olmadan etmək olar.

Nümunələr

Nümunə 1

Loading
Loading