Problem:
Score : 300 points

Problem Statement

Snuke can change a string t of length N into a string t' of length N - 1 under the following rule:

For each i (1 ≤ i ≤ N - 1), the i-th character of t' must be either the i-th or (i + 1)-th character of t.

There is a string s consisting of lowercase English letters.
Snuke's objective is to apply the above operation to s repeatedly so that all the characters in s are the same.
Find the minimum necessary number of operations.

Constraints

1 ≤ |s| ≤ 100

s consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

s

Output

Print the minimum necessary number of operations to achieve the objective.

Sample Input 1

serval

Sample Output 1

3

One solution is: serval → srvvl → svvv → vvv.

Sample Input 2

jackal

Sample Output 2

2

One solution is: jackal → aacaa → aaaa.

Sample Input 3

zzz

Sample Output 3

0

All the characters in s are the same from the beginning.

Sample Input 4

whbrjpjyhsrywlqjxdbrbaomnw

Sample Output 4

8

In 8 operations, he can change s to rrrrrrrrrrrrrrrrrr.

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
typedef long long ll;

inline void Qread(int &x){
	char ch;x = 0;
	while(ch = getchar(), ch < '0' || ch > '9');x = ch - 48;
	while(ch = getchar(), ch >= '0' && ch <= '9')x = (x << 1) + (x << 3) + ch - 48;
}

const int maxn = 110;
int n;
char str[maxn], f[2][maxn];
inline bool Check(char *s, int len){
	for(int i = 1;i < len;++i){
		if(s[i] != s[i - 1])return 0;
	}
	return 1;
}
int Solve(char c){
	int res = 0, no = 0, la = 1, len = n;
	memcpy(f[no], str, sizeof(f[no]));
	while(!Check(f[no], len)){
		no ^= 1, la ^= 1;
		for(int i = 0;i < len - 1;++i){
			if(f[la][i] == c || f[la][i + 1] == c)f[no][i] = c;
			else f[no][i] = f[la][i];
		}
		if(f[la][len - 1] == c)f[no][len - 1] = c;
		else len--;
		res++;
	}
	return res;
}
int main(){
	scanf("%s", str);
	n = strlen(str);
	int ans = 1000000;
	for(char c = 'a';c <= 'z';++c){
		ans = min(ans, Solve(c));
	}
	cout<< ans << endl;
//	while(1);
	return 0;
}