S = gets.chomp N = gets.to_i def shift(str, n) ua = ?A.ord la = ?a.ord str.each_char.map { |c| case c when ?A .. ?Z ((c.ord - ua + n) % 26 + ua).chr when ?a .. ?z ((c.ord - la + n) % 26 + la).chr when ?0 .. ?9 x = c.to_i + n if x < 10 x.to_s else shift("CpCzNkSuTbEoA", x - 10) end end } * "" end puts shift(S, N)