use std::io::*; use utils::*; pub fn main() { let i = stdin(); let mut o = Vec::new(); run(i.lock(), &mut o); stdout().write_all(&o).unwrap(); } fn run(i: R, o: &mut W) { let mut i = ReadEx::from(i); let s = i.read_line(); writeln!(o, "{}", solve(s)).unwrap(); } fn solve(s: &str) -> String { fn decode(c: u8, i: usize) -> u8 { let b = 'A' as u8; let c = c - b; let i = ((i + 1) % 26) as u8; (c + 26 - i) % 26 + b } let s = s.as_bytes(); let mut r = Vec::new(); for i in 0..s.len() { r.push(decode(s[i], i)); } String::from_utf8(r).unwrap() } mod utils { use super::*; pub struct ReadEx { r: R, s: String, } impl ReadEx { pub fn from(r: R) -> Self { ReadEx { r: r, s: String::new(), } } pub fn read_line(&mut self) -> &str { self.s.clear(); self.r.read_line(&mut self.s).unwrap(); self.s.trim() } } }