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: Wrong Answer)

#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#define LL long long
using namespace std;

int t,m,num,ans1,ans2=999;
string s;
struct zhk{char c;int t;}a[30];
inline bool cmp(zhk a,zhk b){return a.t>b.t;}

int main()
{
	cin>>s;
	int len=s.length();
	for(int i=0;i<26;i++)a[i].c=i+'a';
	for(int i=0;i<len;i++)a[s[i]-'a'].t++;
	sort(a,a+26,cmp);
	t=a[0].t;
	if(t==1)
	{
		printf("%d\n",len/2);
		return 0;
	}
	for(int i=0;i<26;i++)
	{
		if(t!=a[i].t)break;
		num=0;ans1=0;
		for(int j=0;j<len;j++)
		{
			if(s[j]!=a[i].c)num++;
			else
			{
				ans1=max(ans1,num);
				num=0;
			}
		}
		ans1=max(ans1,num); 
		ans2=min(ans1,ans2);
	}
	printf("%d\n",ans2);
	return 0;
}