cezar

Time limit: 0.05s Memory limit: 4MB Input: cezar.in Output: cezar.out

Una dintre cele mai vechi metode de criptare, cunoscută sub numele de codificare Cezar, presupune următoarele: cunoscându-se cele 2626 de litere mari ale alfabetului şi un număr natural kk, numit cheie, se înlocuieşte fiecare literă din textul care trebuie codificat cu cea de a kk-a literă care o urmează în alfabet, spaţiile dintre cuvinte rămânând nemodificate. Astfel, dacă trebuie codificat textul CODIFICARE CEZAR cu cheia k=5k=5, se va obţine textul codificat HTINKNHFWJ HJEFW. Se observă că, în cazul în care şirul literelor din alfabet se termină, se reia numărarea de la început (circular). Acest gen de codificare este însă extrem de uşor de "spart". Să ne imaginăm atunci un alt mod de codificare.

Presupunem, ca şi în cazul de mai sus, că textul de codificat conţine doar litere mari şi spaţii. Pentru codificare se procedează astfel:

  1. se elimină spaţiile
  2. se împarte textul obţinut în segmente de câte 1010 litere şi se aşează segmentele unul sub altul; ultimul segment poate fi mai scurt
  3. se alege o secvenţă de 1010 numere naturale (1010 chei) k1k_1, k2k_2, \dots, k10k_{10} şi se codifică fiecare coloană utilizând codificarea Cezar cu cheia corespunzătoare coloanei (k1k_1 - coloana 11, k2k_2 - coloana 22, \dots)
  4. se reface textul punând segmentele la locul lor apoi spaţiile la locul lor

De exemplu, dacă avem de codificat textul OLIMPIADA NATIONALA DE INFORMATICA DE LA GALATI se va obţine, pe rând, la cei patru paşi

  1. OLIMPIADANATIONALADEINFORMATICADELAGALATI
  2. OLIMPIADAN
    ATIONALADE
    INFORMATIC
    ADELAGALAT
    I
    
  3. Fie cheile alese (k1k_1, k2k_2, \dots, k10k_{10}) = (11, 22, 11, 33, 11, 44, 11, 55, 00, 66)
    PNJPQMBIAT
    BVJRMEMFDK
    JPGRSQBYII
    BFFDBKBQAZ
    J 
    
  4. PNJPQMBIATBVJRMEMFDKJPGRSQBYIIBFFOBKBQAZJ
    PNJPQMBIA TBVJRMEMF DK JPGRSQBYIIB FF OB KBQAZJ

Cerinţă

Scrieţi un program care să realizeze decodificarea unui text codificat în modul arătat mai sus.

Date de intrare

Fişierul de intrare cezar.in conţine pe prima linie textul codificat. Linia a doua a fişierului va conţine 1010 numere naturale separate prin câte un spaţiu reprezentând cheile de codificare.

Date de ieşire

Fişierul de ieşire cezar.out va conţine pe prima linie textul decodificat.

Restricții și precizări

  • lungimea textului codificat nu depăşeşte 255255 caractere
  • caracterele folosite sunt litere mari ale alfabetului şi caracterul spaţiu
  • cheile au valori cuprinse între 00 şi 2525
  • literele alfabetului sunt, în ordine:
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Exemplu

cezar.in

PPLKNS NIUKUK 
1 2 3 4 5 6 7 8 9 10

cezar.out

ONIGIM GALATI 

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