import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static final char BAN1 = ' ';
private static final char BAN2 = '.';
private static final char BAN3 = ',';
StringBuilder sb = new StringBuilder();
int k
= Integer.
parseInt(st.
nextToken()) % 26; char[] words = br.readLine().toCharArray();
for(int i = 0; i < s; i++) {
// '.' ',' ' '의 경우 바로 버퍼에 담음
if(words[i] == BAN1 || words[i] == BAN2 || words[i] == BAN3) {
sb.append(words[i]);
continue;
}
words[i] += k; // 그 외 알파벳
// (words[i] + k)가 ASCII 코드의 알파벳 범위를 벗어나는 경우
if((words[i] > 'Z' && words[i] < 'a') || words[i] > 'z') words[i] %= 26;
sb.append(words[i]);
}
System.
out.
println(sb.
toString()); }
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwppbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKCnB1YmxpYyBjbGFzcyBNYWluIHsKCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgQkFOMSA9ICcgJzsKCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgQkFOMiA9ICcuJzsKCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgQkFOMyA9ICcsJzsKCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbnsKCQlCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CgkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CgkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihici5yZWFkTGluZSgpKTsKCQkKCQlpbnQgayA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkpICUgMjY7CgkJaW50IHMgPSBNYXRoLmFicyhJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKSk7CgkJY2hhcltdIHdvcmRzID0gYnIucmVhZExpbmUoKS50b0NoYXJBcnJheSgpOwoJCQoJCWZvcihpbnQgaSA9IDA7IGkgPCBzOyBpKyspIHsKICAgICAgICAgICAgLy8gJy4nICcsJyAnICfsnZgg6rK97JqwIOuwlOuhnCDrsoTtjbzsl5Ag64u07J2MCgkJCWlmKHdvcmRzW2ldID09IEJBTjEgfHwgd29yZHNbaV0gPT0gQkFOMiB8fCB3b3Jkc1tpXSA9PSBCQU4zKSB7CgkJCQlzYi5hcHBlbmQod29yZHNbaV0pOwoJCQkJY29udGludWU7CgkJCX0KCQkJCgkJCXdvcmRzW2ldICs9IGs7ICAgIC8vIOq3uCDsmbgg7JWM7YyM67KzCgkJCQogICAgICAgICAgICAvLyAod29yZHNbaV0gKyBrKeqwgCBBU0NJSSDsvZTrk5zsnZgg7JWM7YyM67KzIOuylOychOulvCDrspfslrTrgpjripQg6rK97JqwCgkJCWlmKCh3b3Jkc1tpXSA+ICdaJyAmJiB3b3Jkc1tpXSA8ICdhJykgfHwgd29yZHNbaV0gPiAneicpIHdvcmRzW2ldICU9IDI2OwoJCQkKCQkJc2IuYXBwZW5kKHdvcmRzW2ldKTsKCQl9CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKHNiLnRvU3RyaW5nKCkpOwoJfQp9Cg==