#include <iostream>
#include <string>
using namespace std;
string Cezar(string buf, string alf, int k)
{
string TC;
for (int j = 0; j < buf.length(); j++)
{
for (int i = 0; i < alf.length(); i++)
{
if (buf[j] == alf[i])
{
if (i + k >= alf.length())
{
TC += (alf[(i + k) % alf.length()]);
}
else
{
TC += ((alf[i + k])); break;
}
}
}
}
return TC;
}
string UnCezar(string TC, string alf, int k)
{
string UnTC;
for (int j = 0; j < TC.length(); j++)
{
for (int i = 0; i < alf.length(); i++)
{
if (TC[j] == alf[i])
{
if (i - k < 0)
{
UnTC += (alf[31+(i - k)]);
}
else
{
UnTC += ((alf[i - k])); break;
}
}
}
}
return UnTC;
}
int main()
{
int k = 7;
string alf = "abcdefghijklmnopqrstuvwxyz ,.?!";
string buf;
cout << "Vvodi stroku: ";
getline (cin, buf);
cout << buf << endl;
string TC = Cezar(buf, alf, k);
cout <<"Cezar style -> "<< TC << endl;
string UnTC = UnCezar(TC, alf, k);
cout <<"UnCezar style -> "<< UnTC << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RyaW5nIENlemFyKHN0cmluZyBidWYsIHN0cmluZyBhbGYsIGludCBrKQp7CglzdHJpbmcgVEM7CgoJZm9yIChpbnQgaiA9IDA7IGogPCBidWYubGVuZ3RoKCk7IGorKykKCXsKCQlmb3IgKGludCBpID0gMDsgaSA8IGFsZi5sZW5ndGgoKTsgaSsrKQoJCXsKCQkJaWYgKGJ1ZltqXSA9PSBhbGZbaV0pCgkJCXsKCQkJCWlmIChpICsgayA+PSBhbGYubGVuZ3RoKCkpCgkJCQl7CgkJCQkJVEMgKz0gKGFsZlsoaSArIGspICUgYWxmLmxlbmd0aCgpXSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJVEMgKz0gKChhbGZbaSArIGtdKSk7IGJyZWFrOwoJCQkJfQoKCQkJfQoJCX0KCX0KCXJldHVybiBUQzsKfQoKc3RyaW5nIFVuQ2V6YXIoc3RyaW5nIFRDLCBzdHJpbmcgYWxmLCBpbnQgaykKeyAKCXN0cmluZyBVblRDOwoJCWZvciAoaW50IGogPSAwOyBqIDwgVEMubGVuZ3RoKCk7IGorKykKCXsKCQlmb3IgKGludCBpID0gMDsgaSA8IGFsZi5sZW5ndGgoKTsgaSsrKQoJCXsKCQkJaWYgKFRDW2pdID09IGFsZltpXSkKCQkJewoJCQkJaWYgKGkgLSBrIDwgMCkKCQkJCXsKCQkJCQlVblRDICs9IChhbGZbMzErKGkgLSBrKV0pOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCVVuVEMgKz0gKChhbGZbaSAtIGtdKSk7IGJyZWFrOwoJCQkJfQoKCQkJfQoJCX0KCX0KcmV0dXJuIFVuVEM7Cn0KCmludCBtYWluKCkKewoJaW50IGsgPQk3OwoJc3RyaW5nIGFsZiA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAsLj8hIjsgCglzdHJpbmcgYnVmOwoJY291dCA8PCAiVnZvZGkgc3Ryb2t1OiAiOwoJCWdldGxpbmUgKGNpbiwgYnVmKTsKCQljb3V0IDw8IGJ1ZiA8PCBlbmRsOwoJCXN0cmluZyBUQyA9IENlemFyKGJ1ZiwgYWxmLCBrKTsKCQljb3V0IDw8IkNlemFyIHN0eWxlIC0+ICI8PCBUQyA8PCBlbmRsOwoJCXN0cmluZyBVblRDID0gVW5DZXphcihUQywgYWxmLCBrKTsKCQljb3V0IDw8IlVuQ2V6YXIgc3R5bGUgLT4gIjw8IFVuVEMgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0K