const rl = require("readline").createInterface({
input: process.stdin,
output: process.stdout,
});
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
// 加密
function decode(str) {
const decodeArr = str.split("");
const len = decodeArr.length;
let result = JSON.parse(JSON.stringify(decodeArr));
for (let i = 0; i < len; i++) {
let item = decodeArr[i];
if (!isNaN(item)) {
if (parseInt(item) == 9) {
result[i] = "0";
} else {
result[i] = String(parseInt(item) + 1);
}
} else {
if (item == "z") {
result[i] = "A";
} else if (item == "Z") {
result[i] = "a";
} else {
// 判断大小写
if (item.charCodeAt() >= 97) {
// 小写
// 转大写 减31
result[i] = String.fromCharCode(
result[i].charCodeAt() - 31
);
} else {
// 大写
// 转小写 加33
result[i] = String.fromCharCode(
result[i].charCodeAt() + 33
);
}
}
}
}
return result.join("");
}
// 解密 加密逆过程
function encode(str) {
const encodeArr = str.split("");
const len = encodeArr.length;
let result = encodeArr;
for (let i = 0; i < len; i++) {
let item = encodeArr[i];
if (!isNaN(item)) {
// 数字
if (parseInt(item) == 0) {
result[i] = "9";
} else {
result[i] = String(parseInt(item) - 1);
}
} else {
if (item == "A") {
result[i] = "z";
} else if (item == "a") {
result[i] = "Z";
} else {
// 判断大小写
if (item.charCodeAt() >= 97) {
// 小写
// 转大写 减33(往后)
result[i] = String.fromCharCode(
item.charCodeAt() - 33
);
} else {
// 大写
// 转大写 加31
result[i] = String.fromCharCode(
item.charCodeAt() + 31
);
}
}
}
}
return result.join("");
}
void (async function () {
let len = 1;
while ((line = await readline())) {
// 处理输入出现问题
let result = "";
if (len == 1) {
result += decode(line);
} else {
result += encode(line);
}
console.log(result);
len++;
// 加解密
// 1.判断当前字母大小写
// 2.按规则进行变换
// 2.1 规则
// 2.1.1加密
// 小写转大写 -31
// 大写转小写 +31
// 2.1.2解密
// 小写转大写 +31
// 大写转小写 -31
// 3.注意边界条件
// 3.1 9-> 0
// 3.2 z->A(-57) Z->a(+7)
}
})();