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<bits/stdc++.h>
#define watch(x) cout << (#x) << " is " << (x) << endl
typedef long long ll;
using namespace std;
int static fast = [](){
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0); return 0;
}();
// freopen("input.txt", "r", stdin);


int main() {
    string s;
    cin >> s;
    unordered_set<char> cand;
    auto sub = [&] (string ss, char c) -> int {
        int iter = 0;
        while(true) {
            int cnt = 0;
            for(int i = 0; i < ss.size(); i++) {
                if (ss[i] == c)
                    cnt += 1;
            }
            if(cnt == ss.size())
                return iter;
            iter++;
            for(int i = 1; i < ss.size(); i++) {
                if (ss[i] == c)
                    ss[i-1] = c;
            }
            ss.pop_back();
        }
    };
    for(char c: s)
        cand.insert(c);
    int ans = s.size();
    for(char c: cand) {
        ans = min(ans, sub(s, c));
    }
    cout << ans << endl;
    return 0;
}