using System;
using System.Linq;
using System.Collections.Generic;
namespace Atcoder20190616
{
class ProgramA
{
static void Main(string args)
{
//日付を入力する
string input = Console.ReadLine();
int n = input[0];//文字をint型で代入する
n++;//int型で1足すことでアルファベットが1進む。
//char型にして答を出す
Console.WriteLine((char)(n));
}
}
class ProgramB
{
static void Main(string args)
{
//入力
string input = Console.ReadLine().Split(' ');
int n = int.Parse(input[0]);
int k = int.Parse(input[1]);
int m = int.Parse(input[2]);
string input_a = Console.ReadLine().Split(' ');
int a = new int[n -1];
int sum = 0;
//今までの点をすべて足す
for(int i = 0;i < n -1;i++)
{
a[i] = int.Parse(input_a[i]);
sum += a[i];
}
//必要な点数と今までのままでの点数の差から判断する
if(m*n - sum > k)//最後に取れる点より必要な点がおおきいときはあり得ない
{
Console.WriteLine("-1");
}
else if(m*n - sum <= 0)//最後に点を取らなくていいのはすでに必要な点数とれているとき
{
Console.WriteLine("0");
}
else//それ以外は必要な点数を出す
{
Console.WriteLine(m*n - sum);
}
}
}
class ProgramC
{
static void Main(string args)
{
//入力
string input = Console.ReadLine().Split(' ');
int n = int.Parse(input[0]);
int m = int.Parse(input[1]);
int right = new int[n];
int wrong = new int[n];
//それぞれを判定する
for(int i = 0;i < m;i++)
{
string temp = Console.ReadLine().Split(' ');
int p = int.Parse(temp[0]);
string s = temp[1];
//すでにACしているなら無視する
if(right[p-1] == 1)
continue;
if(s == "WA")
{
wrong[p-1]++;//間違い数をカウント
}
else
{
right[p-1] = 1;//ACしたら1にする。
}
}
int ans1 = 0;
int ans2 = 0;
for(int i = 0;i < n; i++)
{
//正しい答えの数を足す
ans1 += right[i];
//もしその問題が答えならWAの数を計上する
if(right[i] == 1)
ans2 += wrong[i];
}
//答えを出力
Console.WriteLine(ans1 + " " + ans2);
}
}
class ProgramD
{
static void Main(string args)
{
//入力
string input = Console.ReadLine().Split(' ');
int H = int.Parse(input[0]);
int W = int.Parse(input[1]);
int INF = 1000000;
//ワーシャルフロイド法の準備。すべてとりあえず#とする。(そうするとこのあと.だけの判定で済む)
int[ , ] dis = new int[H*W + 1,H*W + 1];
for(int i = 0;i < H*W;i++)
for(int j = 0;j < H*W;j++)
{
if(i == j)
dis[i,j] = 0;
else
dis[i,j] = INF;
}
//前の迷路状態を記録して置くためにmaze2を作成。
string maze2 = "####################";
for(int i = 0;i < H;i++)
{
//迷路を読み込む
string maze = Console.ReadLine();
for(int j = 0;j < W;j++)
{
//横のつながりを判定する。つながっていれば1を代入
if(j > 0 && maze[j - 1] == '.' && maze[j] == '.')
{
dis[i*W + j, i*W + j - 1] = 1;
dis[i*W + j-1, i*W + j] = 1;
}
//縦のつながりを判定する。ひとつ上と判定します。
if(i > 0 && maze2[j] == '.' && maze[j] == '.')
{
dis[i*W + j, (i-1)*W + j] = 1;
dis[(i-1)*W + j, i*W + j] = 1;
}
}
//メイズを記録する
maze2 = maze;
}
//ワーシャルフロイド法を用いる
for (int k = 0; k < H*W; k++) // 経由する頂点
for (int i = 0; i < H*W; i++) // 始点
for (int j = 0; j < H*W; j++) // 終点
dis[i,j] = min(dis[i,j], dis[i,k] + dis[k,j]);
int ans = 0;
//最大の経路を算出する
for(int i = 0;i < H*W;i++)
for(int j = 0;j < H*W;j++)
{
if(dis[i,j] <= INF)
{
int temp = dis[i,j];
if(ans < temp)
ans = temp;
}
}
//答を出す
Console.WriteLine(ans);
}
}
}