# coding: utf-8



import sys

import math

import collections

import itertools

from inspect import currentframe

INF = 10 ** 10

MOD = 10 ** 9 + 7

def input() : return sys.stdin.readline().strip()

def gcd(x, y) : return y if x % y == 0 else gcd(y, x % y)

def lcm(x, y) : return (x * y) // gcd(x, y)

def I() : return int(input())

def MI() : return map(int, input().split())

def LI() : return [int(x) for x in input().split()]

def RI(N) : return [int(input()) for _ in range(N)]

def LRI(N) : return [[int(x) for x in input().split()] for _ in range(N)]

def chkprint(*args) : names = {id(v):k for k,v in currentframe().f_back.f_locals.items()}; print(', '.join(names.get(id(arg),'???')+' = '+repr(arg) for arg in args))



N = I()

S = input()



alp = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]



for s in S:

    print(alp[(alp.index(s) + N) % 26], end="")

# coding: utf-8



import sys

import math

import collections

import itertools

INF = 10 ** 10

MOD = 10 ** 9 + 7

def input() : return sys.stdin.readline().strip()

def gcd(x, y) : return y if x % y == 0 else gcd(y, x % y)

def lcm(x, y) : return (x * y) // gcd(x, y)

def I() : return int(input())

def LI() : return [int(x) for x in input().split()]

def RI(N) : return [int(input()) for _ in range(N)]

def LRI(N) : return [[int(x) for x in input().split()] for _ in range(N)]

def PL(L) : print(*L, sep="\n")



N = I()

S = input()



for s in S:

    print(chr(65 + (ord(s) - 65 + N) % 26), end="")

# coding: utf-8
import sys
import math
import collections
import itertools
from inspect import currentframe

INF = 10**10
MOD = 10**9 + 7


def input():
    return sys.stdin.readline().strip()


def gcd(x, y):
    return y if x % y == 0 else gcd(y, x % y)


def lcm(x, y):
    return (x * y) // gcd(x, y)


def I():
    return int(input())


def MI():
    return map(int, input().split())


def LI():
    return [int(x) for x in input().split()]


def RI(N):
    return [int(input()) for _ in range(N)]


def LRI(N):
    return [[int(x) for x in input().split()] for _ in range(N)]


def chkprint(*args):
    names = {id(v): k for k, v in currentframe().f_back.f_locals.items()}
    print(", ".join(names.get(id(arg), "???") + " = " + repr(arg) for arg in args))


N = I()
S = input()
alp = [
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "H",
    "I",
    "J",
    "K",
    "L",
    "M",
    "N",
    "O",
    "P",
    "Q",
    "R",
    "S",
    "T",
    "U",
    "V",
    "W",
    "X",
    "Y",
    "Z",
]
for s in S:
    print(alp[(alp.index(s) + N) % 26], end="")

# coding: utf-8
import sys
import math
import collections
import itertools

INF = 10**10
MOD = 10**9 + 7


def input():
    return sys.stdin.readline().strip()


def gcd(x, y):
    return y if x % y == 0 else gcd(y, x % y)


def lcm(x, y):
    return (x * y) // gcd(x, y)


def I():
    return int(input())


def LI():
    return [int(x) for x in input().split()]


def RI(N):
    return [int(input()) for _ in range(N)]


def LRI(N):
    return [[int(x) for x in input().split()] for _ in range(N)]


def PL(L):
    print(*L, sep="\n")


N = I()
S = input()
for s in S:
    print(chr(65 + (ord(s) - 65 + N) % 26), end="")

-from inspect import currentframe -def MI(): -    return map(int, input().split()) - - -def chkprint(*args): -    names = {id(v): k for k, v in currentframe().f_back.f_locals.items()} -    print(", ".join(names.get(id(arg), "???") + " = " + repr(arg) for arg in args)) +def PL(L): +    print(*L, sep="\n") -alp = [ -    "A", -    "B", -    "C", -    "D", -    "E", -    "F", -    "G", -    "H", -    "I", -    "J", -    "K", -    "L", -    "M", -    "N", -    "O", -    "P", -    "Q", -    "R", -    "S", -    "T", -    "U", -    "V", -    "W", -    "X", -    "Y", -    "Z", -] -    print(alp[(alp.index(s) + N) % 26], end="") +    print(chr(65 + (ord(s) - 65 + N) % 26), end="")