#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void) {
int n;
char table[1001][201];
int min_len = 201;
for(int i=0; i<n; i++){
if(strlen(table
[i
]) < min_len
){ }
}
char ciphertext[10001];
scanf(" %[^\n]", ciphertext
);
int len_key = 0;
char key[201];
for(int i = 0; i < min_len; i++){
char c = table[0][i];
int iskey = 1;
for(int j = 1; j < n; j++){
if(table[j][i] != c)
iskey = 0;
}
if(iskey){
key[len_key++] = c;
}
else{
break;
}
}
if(len_key == 0){
return 0;
}
else{
key[len_key] = '\0';
}
// decrypt
char plaintext[10001];
int key_i = 0;
for(int i
=0; i
<strlen(ciphertext
); i
++){ char k
= tolower(key
[key_i
% len_key
]) - 'a'; char c = ciphertext[i] ;
plaintext[i] = ((ciphertext[i] - 'A') - k + 26) % 26 + 'A';
}
else{
plaintext[i] = ((ciphertext[i] - 'a') - k + 26) % 26 + 'a';
}
}
plaintext
[strlen(ciphertext
)] = '\0';
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgppbnQgbWFpbih2b2lkKSB7CglpbnQgbjsKCXNjYW5mKCIlZCIsICZuKTsKCWNoYXIgdGFibGVbMTAwMV1bMjAxXTsKCWludCBtaW5fbGVuID0gMjAxOwoJZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKCQlzY2FuZigiJXMiLCB0YWJsZVtpXSk7CgkJaWYoc3RybGVuKHRhYmxlW2ldKSA8IG1pbl9sZW4pewoJCQltaW5fbGVuID0gc3RybGVuKHRhYmxlW2ldKTsKCQl9Cgl9CgljaGFyIGNpcGhlcnRleHRbMTAwMDFdOwoJc2NhbmYoIiAlW15cbl0iLCBjaXBoZXJ0ZXh0KTsKCQoJaW50IGxlbl9rZXkgPSAwOwoJY2hhciBrZXlbMjAxXTsKCWZvcihpbnQgaSA9IDA7IGkgPCBtaW5fbGVuOyBpKyspewoJCWNoYXIgYyA9IHRhYmxlWzBdW2ldOwoJCWludCBpc2tleSA9IDE7CgkJZm9yKGludCBqID0gMTsgaiA8IG47IGorKyl7CgkJCWlmKHRhYmxlW2pdW2ldICE9IGMpCgkJCQlpc2tleSA9IDA7CgkJfQoJCWlmKGlza2V5KXsKCQkJa2V5W2xlbl9rZXkrK10gPSBjOwoJCX0KCQllbHNlewoJCQlicmVhazsKCQl9Cgl9CglpZihsZW5fa2V5ID09IDApewoJCXByaW50ZigiXG5cbiIpOwoJCXJldHVybiAwOwoJfQoJZWxzZXsKCQlrZXlbbGVuX2tleV0gPSAnXDAnOwoJCXByaW50ZigiJXMiLCBrZXkpOwoJfQoJCgkvLyBkZWNyeXB0CgljaGFyIHBsYWludGV4dFsxMDAwMV07CglpbnQga2V5X2kgPSAwOwoJZm9yKGludCBpPTA7IGk8c3RybGVuKGNpcGhlcnRleHQpOyBpKyspewoJCWNoYXIgayA9IHRvbG93ZXIoa2V5W2tleV9pICUgbGVuX2tleV0pIC0gJ2EnOwoJCWNoYXIgYyA9IGNpcGhlcnRleHRbaV0gOwoJCWlmKGlzdXBwZXIoYykpewoJCQlwbGFpbnRleHRbaV0gPSAoKGNpcGhlcnRleHRbaV0gLSAnQScpIC0gayArIDI2KSAlIDI2ICsgJ0EnOwoJCX0KCQllbHNlewoJCQlwbGFpbnRleHRbaV0gPSAoKGNpcGhlcnRleHRbaV0gLSAnYScpIC0gayArIDI2KSAlIDI2ICsgJ2EnOwoJCX0KCX0KCXBsYWludGV4dFtzdHJsZW4oY2lwaGVydGV4dCldID0gJ1wwJzsKCXByaW50ZigiJXMiLCBwbGFpbnRleHQpOwoJCglyZXR1cm4gMDsKfQo=