#include <iostream>
#include <cstring>
using namespace std;
int main() {
const int MAX_SIZE = 256; // 256 - максимальное кол-во букв по условию + нулевой символ
char *cipher = new char [MAX_SIZE];
cin.getline (cipher,MAX_SIZE);
int k;
cin >> k;
for(int i = 0; i < strlen(cipher); i++){ // Цикл дешифровки выполняется до последней буквы
if(cipher[i] >= 'A' + k) cipher[i] -= k;
else cipher[i] = 'Z' - (k - (cipher[i] - '@')); //cipher[i] - '@' расстояние между i-ым символом и символом 'A', где '@' - символ идущий перед символом 'A'
/* Если полученный символ принадлежит к заглавным латинским буквам, ставим его на место зашифрованного
Если нет, то возвращаемся к символу "Z" и отступаем от него на k минус уже пройденное кол-во символов */
}
cout << cipher;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJY29uc3QgaW50IE1BWF9TSVpFID0gMjU2OyAvLyAyNTYgLSDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC7LdCy0L4g0LHRg9C60LIg0L/QviDRg9GB0LvQvtCy0LjRjiArINC90YPQu9C10LLQvtC5INGB0LjQvNCy0L7QuwoJY2hhciAqY2lwaGVyID0gbmV3IGNoYXIgW01BWF9TSVpFXTsgCgljaW4uZ2V0bGluZSAoY2lwaGVyLE1BWF9TSVpFKTsKCWludCBrOwoJY2luID4+IGs7Cglmb3IoaW50IGkgPSAwOyBpIDwgc3RybGVuKGNpcGhlcik7IGkrKyl7ICAvLyDQptC40LrQuyDQtNC10YjQuNGE0YDQvtCy0LrQuCDQstGL0L/QvtC70L3Rj9C10YLRgdGPINC00L4g0L/QvtGB0LvQtdC00L3QtdC5INCx0YPQutCy0YsKCQlpZihjaXBoZXJbaV0gPj0gJ0EnICsgaykgY2lwaGVyW2ldIC09IGs7CgkJZWxzZSBjaXBoZXJbaV0gPSAnWicgLSAoayAtIChjaXBoZXJbaV0gLSAnQCcpKTsgLy9jaXBoZXJbaV0gLSAnQCcg0YDQsNGB0YHRgtC+0Y/QvdC40LUg0LzQtdC20LTRgyBpLdGL0Lwg0YHQuNC80LLQvtC70L7QvCDQuCDRgdC40LzQstC+0LvQvtC8ICdBJywg0LPQtNC1ICdAJyAtINGB0LjQvNCy0L7QuyDQuNC00YPRidC40Lkg0L/QtdGA0LXQtCDRgdC40LzQstC+0LvQvtC8ICdBJwoJCS8qINCV0YHQu9C4INC/0L7Qu9GD0YfQtdC90L3Ri9C5INGB0LjQvNCy0L7QuyDQv9GA0LjQvdCw0LTQu9C10LbQuNGCINC6INC30LDQs9C70LDQstC90YvQvCDQu9Cw0YLQuNC90YHQutC40Lwg0LHRg9C60LLQsNC8LCDRgdGC0LDQstC40Lwg0LXQs9C+INC90LAg0LzQtdGB0YLQviDQt9Cw0YjQuNGE0YDQvtCy0LDQvdC90L7Qs9C+CgkJICAg0JXRgdC70Lgg0L3QtdGCLCDRgtC+INCy0L7Qt9Cy0YDQsNGJ0LDQtdC80YHRjyDQuiDRgdC40LzQstC+0LvRgyAiWiIg0Lgg0L7RgtGB0YLRg9C/0LDQtdC8INC+0YIg0L3QtdCz0L4g0L3QsCBrINC80LjQvdGD0YEg0YPQttC1INC/0YDQvtC50LTQtdC90L3QvtC1INC60L7Quy3QstC+INGB0LjQvNCy0L7Qu9C+0LIgKi8KCX0KCWNvdXQgPDwgY2lwaGVyOwoJcmV0dXJuIDA7Cn0=