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 Scala (2.11.7) (judge verdict: Wrong Answer)


object Main extends App {
    
    def is_ok(s: Array[Char]): Boolean = {
        if (s.isEmpty) {
            true
        } else {
            val c = s.head
            s.map(_ == c).reduceLeft(_ && _)
        }
    }
    
    def solve_impl(_s: Array[Char], c: Int): Int = {
        if (is_ok(_s)) {
            c
        } else {
            val s = _s.tail
            val m = s.groupBy(identity).map(g => g._2.length).reduceLeft(_ max _)
            val set = s.groupBy(identity).filter(g => g._2.length == m).map(g => g._1)
            
            for (ch <- set) {
                for (i <- 0 until s.length) {
                    if (_s(i) == ch || _s(i+1) == ch) {
                        s(i) = ch
                    }
                }
            }
            
            solve_impl(s, c + 1)
        }
    }
    
    def solve(s: Array[Char]): Int = {
        solve_impl(s, 0)
    }
    
    val sc = new java.util.Scanner(System.in)
    val str = sc.next
    
    val s = str.toArray
    
    println(solve(s))
}