Problem:
Score : 100 points

Problem Statement

Given is a lowercase English letter C that is not z. Print the letter that follows C in alphabetical order.

Constraints

C is a lowercase English letter that is not z.

Input

Input is given from Standard Input in the following format:

C

Output

Print the letter that follows C in alphabetical order.

Sample Input 1

a

Sample Output 1

b

a is followed by b.

Sample Input 2

y

Sample Output 2

z

y is followed by z.

Solution in Rust (1.15.1) (judge verdict: Runtime Error)

pub fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

pub fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>()
        .split_whitespace()
        .map(|e| e.parse().ok().unwrap())
        .collect()
}

pub fn read_vec2<T: std::str::FromStr>(n: usize) -> Vec<Vec<T>> {
    (0..n).map(|_| read_vec()).collect()
}

pub fn read_col<T: std::str::FromStr>(n: usize) -> Vec<T> {
    (0..n).map(|_| read()).collect()
}

use std::collections::VecDeque;

fn f(i: usize, j: usize, h: usize, w: usize, mat: &Vec<Vec<char>>) -> u32 {
    let mut check: Vec<Vec<bool>> = vec![vec![false; w]; h];
    let mut ret = 0;
    for i2 in 0..h {
        for j2 in 0..w {
            if mat[i2][j2] == '#' {
                check[i2][j2] = true;
            }
        }
    }

    let mut vd = VecDeque::new();
    vd.push_back((i, j, 0));
    check[i][j] = true;

    loop {
        match vd.pop_front() {
            None => {
                break;
            }
            Some((i2, j2, d)) => {
                check[i2][j2] = true;
                if i2 > 0 && !check[i2 - 1][j2] {
                    check[i2 - 1][j2] = true;
                    vd.push_back((i2 - 1, j2, d + 1));
                    ret = d + 1;
                }
                if i2 < h - 1 && !check[i2 + 1][j2] {
                    check[i2 + 1][j2] = true;
                    vd.push_back((i2 + 1, j2, d + 1));
                    ret = d + 1;
                }
                if j2 > 0 && !check[i2][j2 - 1] {
                    check[i2][j2 - 1] = true;
                    vd.push_back((i2, j2 - 1, d + 1));
                    ret = d + 1;
                }
                if j2 < w - 1 && !check[i2][j2 + 1] {
                    check[i2][j2 + 1] = true;
                    vd.push_back((i2, j2 + 1, d + 1));
                    ret = d + 1;
                }
            }
        }
    }

    ret
}

fn main() {
    let hw: Vec<usize> = read_vec();
    let h = hw[0];
    let w = hw[1];
    let sv: Vec<String> = read_col(h);
    let mat: Vec<Vec<char>> = sv.into_iter().map(|s| s.chars().collect()).collect();

    let mut ans = 0;
    for i in 0..h {
        for j in 0..w {
            if mat[i][j] == '#' {
                continue;
            }
            let tmp = f(i, j, h, w, &mat);
            if tmp > ans {
                ans = tmp;
            }
            // println!("{} {} {}", i, j, tmp);
        }
    }
    println!("{}", ans);
}