Ana și Bogdan sunt pasionați de criptarea mesajelor. Ei au studiat mai multe metode de criptare. Ultimul algoritm pe care l-au studiat presupune să scrie un cuvânt cu litere mari ale alfabetului englez. Apoi, sub acest cuvânt să scrie toate permutările sale circulare cu o poziție spre stânga obținând astfel o matrice de caractere. Ordonează lexicografic liniile matricii, memorează ultima coloană și adaugă la finalul șirului astfel obținut numărul liniei pe care a ajuns cuvântul inițial, șirul rezultat fiind denumit cript-ul șirului inițial. Analizând matricea de caractere obținută ei au observat că în matrice se obțin submatrici cu proprietatea că în cele patru colțuri ale lor se află același caracter.
Cerința
Să se scrie un program care citește un număr natural c
, reprezentând cerința care trebuie să fie rezolvată, apoi citește un cuvânt. Programul rezolvă următoarele cerințe:
1. Dacă c = 1
, șirul citit este un cuvânt necriptat, programul va determina și va afișa cript-ul obținut conform algoritmului descris anterior.
2. Dacă c = 2
, șirul citit este un cript, programul va determina și va afișa cuvântul necriptat.
3. Dacă c = 3
, șirul citit este un cuvânt necriptat, programul va determina matricea de caractere obținută conform algoritmului descris anterior și va afișa numărul maxim de elemente dintr-o submatrice cu proprietatea că în colțurile sale se află același caracter.
Date de intrare
Pe prima linie a fişierului de intrare criptare.in
este scrisă cerința (1
, 2
sau 3
). Pe linia a doua a fișierului este scris un cuvânt. Dacă cerința este 1
sau 3
cuvântul este necriptat, dacă cerința este 2
cuvântul este un cript.
Date de ieșire
Dacă cerința este 1, pe prima linie a fișierului de ieșire criptare.out
va fi scris criptul cuvântului citit. Dacă cerința este 2 pe prima linie va fi scris cuvântul necriptat. Dacă cerința este 3 pe prima linie va fi scris un număr natural reprezentând numărul maxim de elemente dintr-o submatice care are în colțurile sale același caracter.
Restricții și precizări
3 ≤ lungimea cuvântului aflat pe prima linie a fișierului ≤ 100
- În matricea de cuvinte liniile şi coloanele se numerotează de la
0
. - Dacă șirul inițial apare pe mai multe linii ale matricei, se va considera că prima apariție reprezintă șirul inițial.
Exemplul 1:
criptare.in
1 ANA
criptare.out
NAA1
Explicație
Permutare circulară Ordonare -> NAA1
ANA AAN
NAA ANA
AAN NAA
Exemplul 2:
criptare.in
1 ANA
criptare.out
NAA1
Exemplul 3:
criptare.in
3 MERE
criptare.out
6
Explicație
Permutare circulară Ordonare
MERE EMER
EREM EREM
REME MERE
EMER REME