// Program to print BFS and DFS traversal from a given 
// source vertex. BFS(int s) and DFS traverses vertices 
// reachable from s. 

#include<bits/stdc++.h>
using namespace std;
#define fastIO ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include<cstdio>
#define MAX 10000001
#include<stdio.h>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>

#include<cstdlib>
#include<cassert>
#include<unordered_map>
#define ll long long
#define ld long double
#define lli long long int
#define pb push_back
#define INF 1000000000
#define mod 1000000007
#define MOD 1000000007
//#define mp make_pair
#define loop(i,n) for (lli i = 0; i < n; i++)
#define FOR(i,a,b) for (lli i = a; i < b; i+=1)
#define loop_rev(i,n) for (lli i = n-1; i >= 0; i--)
#define FOR_REV(i,a,b) for (lli i = a; i >= b; i--)
#define all(v) v.begin(),v.end()
#define pii pair<int,int>
#define F first
#define S second
#define mii map<lli,lli>
#define vi vector<lli>
#define vvi vector<lli>
#define itr :: iterator it
#define WL(t) while(t --)
#define gcd(a,b) __gcd((a),(b))
#define lcm(a,b) (a/gcd(a,b))*b
#define abs(x) ((x < 0)?-(x):x)

#define print(x) printf("%lli\n",x);
#define print2(x,y) printf("%lli %lli\n",x,y);
#define print3(x,y,z) printf("%lli %lli %lli\n",x,y,z);

#define scan(x) scanf("%lld",&x);
#define scan2(x,y) scanf("%lld %lld",&x,&y);
#define scan3(x,y,z) scanf("%lld %lld %lld",&x,&y,&z);

#define scanarr(a,n) for(lli i=0;i<n;i++)    cin>>a[i];
#define scanvector(a,n) for(lli i=0;i<n;i++){ lli x ; cin>>x; a.push_back(x);}

#define printarr(a,n) for(lli i=0;i<n;i++)   printf("%lli ",a[i]); printf("\n");
#define printvector(a,n) for(lli i=0;i<n;i++)   printf("%lli ",a[i]); printf("\n");

#define YES printf("YES\n");
#define Yes printf("Yes\n");
#define yes printf("yes\n");
#define NO  printf("NO\n");
#define No  printf("No\n");
#define no  printf("no\n");

#define endl '\n'

#define deb(x) cout<<#x<<" "<<x<<endl;

void addEdge(vector<lli>adj[],lli u, lli v) 
{ 
	adj[u].push_back(v); // Add v to u’s list. 
	//adj[v].push_back(u);
} 

void DFS(vector<lli>adj[],lli total_vertex,lli source,map<lli,bool>&mp,map<lli,bool>pre) 
{ 
    lli V = total_vertex;
    lli s = source;
    bool visited[V]={0};
    
    stack<lli> stack;
    visited[s]=true;
    stack.push(s);
    vector<lli>cr;
    
    while (!stack.empty()) 
	{ 
	// Pop a vertex from stack and print it 
	s = stack.top(); 
	if(pre[s]==true){
			for(auto xt : cr)
			    mp[xt]=true;
			}
        cr.pb(s);
        stack.pop(); 
		for (auto i : adj[s]) 
		{ 
			if (!visited[i]) 
			{ 
				visited[i] = true; 
				stack.push(i); 
			} 
		} 
	}
}

int main() 
{ 
    lli t=1;
    //cin>>t;
    while(t--){
        lli n;
        cin>>n;
        string s;
        cin>>s;
        map<char,int>mp;
        map<int,char>mpc;
        char ch='A';
        mpc[0]='Z';
        loop(i,26){
            mp[ch]=i+1;
            mpc[i+1]=ch;
            ch++;
         //   cout<<ch;
        }
        loop(i,s.length()){
            cout<<mpc[(mp[s[i]]+n)%26];
        }
    }
return 0;
}

Measured memory_bytes: 256