cifru

Time limit: 0.05s Memory limit: 16MB Input: cifru.in Output: cifru.out

Copiii solarieni se joacă adesea trimiţându-şi mesaje codificate. Pentru codificare ei folosesc un cifru bazat pe o permutare pp a literelor alfabetului solarian şi un număr natural dd.
Alfabetul solarian conţine mm litere foarte complicate, aşa că noi le vom reprezenta prin numere de la 11 la mm.
Dat fiind un mesaj în limbaj solarian, reprezentat de noi ca o succesiune de nn numere cuprinse între 11 şi mm, c1 c2cnc_1 \ c_2 \dots c_n, codificarea mesajului se realizează astfel: se înlocuieşte fiecare literă cic_i cu p(ci)p(c_i), apoi şirul obţinut p(c1) p(c2)p(cn)p(c_1) \ p(c_2) \dots p(c_n) se roteşte spre dreapta, făcând o permutare circulară cu dd poziţii rezultând şirul p(cnd+1)p(cn1) p(cn) p(c1) p(c2)p(cnd)p(c_{n-d+1}) \dots p(c_{n-1}) \ p(c_n) \ p(c_1) \ p(c_2) \dots p(c_{n-d}).
De exemplu, pentru mesajul 2 1 3 3 2 12 \ 1 \ 3 \ 3 \ 2 \ 1, permutarea p=(3 1 2)p = (3 \ 1 \ 2) (adică p(1)=3p(1)=3, p(2)=1p(2)=1, p(3)=2p(3)=2) şi d=2d=2. Aplicând permutarea pp vom obţine şirul 1 3 2 2 1 31 \ 3 \ 2 \ 2 \ 1 \ 3, apoi rotind spre dreapta şirul cu două poziţii obţinem codificarea 1 3 1 3 2 21 \ 3 \ 1 \ 3 \ 2 \ 2.

Cerinţă

Date fiind un mesaj necodificat şi codificarea sa, determinaţi cifrul folosit (permutarea pp şi numărul dd).

Date de intrare

Fişierul de intrare cifru.in conţine pe prima linie numele naturale nn şi mm, separate prin spaţiu, reprezentând lungimea mesajului şi respectiv numărul de litere din alfabetul solarian. Pe cea de a doua linie este scris mesajul necodificat ca o succesiune de nn numere cuprinse între 11 şi mm separate prin câte un spaţiu. Pe cea de a treia linie este scris mesajul codificat ca o succesiune de n numere cuprinse între 11 şi mm separate prin câte un spaţiu.

Date de ieşire

Fişierul de ieşire cifru.out va conţine pe prima linie numărul natural dd, reprezentând numărul de poziţii cu care s-a realizat permutarea circulară spre dreapta. Dacă pentru dd există mai multe posibilităţi se va alege valoarea minimă. Pe următoarea linie este descrisă permutarea pp. Mai exact se vor scrie valorile p(1)p(1), p(2)p(2), \dots, p(m)p(m) separate prin câte un spaţiu.

Restricții și precizări

  • n100 000n \leq 100 \ 000
  • m9 999m \leq 9 \ 999
  • Mesajul conţine fiecare număr natural din intervalul [1,m][1, m] cel puţin o dată.
  • Pentru teste cu m5m \leq 5 se acordă 4040 de puncte din care 2020 pentru teste şi cu n2 000n \leq 2 \ 000.

Exemplu

cifru.in

6 3
2 1 3 3 2 1
1 3 1 3 2 2

cifru.out

2
3 1 2

Log in or sign up to be able to send submissions!