Problem:
Score : 200 points

Problem Statement

We have a string S consisting of uppercase English letters. Additionally, an integer N will be given.

Shift each character of S by N in alphabetical order (see below), and print the resulting string.

We assume that A follows Z. For example, shifting A by 2 results in C (A \to B \to C), and shifting Y by 3 results in B (Y \to Z \to A \to B).

Constraints

0 \leq N \leq 26

1 \leq |S| \leq 10^4

S consists of uppercase English letters.

Input

Input is given from Standard Input in the following format:

N
S

Output

Print the string resulting from shifting each character of S by N in alphabetical order.

Sample Input 1

2
ABCXYZ

Sample Output 1

CDEZAB

Note that A follows Z.

Sample Input 2

0
ABCXYZ

Sample Output 2

ABCXYZ

Sample Input 3

13
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Sample Output 3

NOPQRSTUVWXYZABCDEFGHIJKLM

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::io::*;
use std::str::FromStr;
use std::collections::HashMap;

fn read<T: FromStr>() -> Option<T> {
    let stdin = stdin();
    let s = stdin
        .bytes()
        .map(|c| c.unwrap() as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect::<String>();
    s.parse::<T>().ok()
}


fn main() {
    let n: usize = read().unwrap();
    let s: String = read().unwrap();
    let alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let v_alph: Vec<char> = alph.chars().collect();

    let mut map: HashMap<char, usize> = HashMap::new();
    for (j, a_j) in alph.chars().enumerate() {
        map.insert(a_j, j);
    }
    // println!("{:?}", map);

    let mut after = String::new();
    for s_i in s.chars() {
        let s_num = map.get(&s_i).unwrap();
        let tmp = v_alph[(s_num + n) % 26];
        after.push(tmp);
    }
    println!("{}", after);
}