You are given a string *s* consisting of lowercase Latin letters. Character *c* is called *k*-dominant iff each substring of *s* with length at least *k* contains this character *c*.

You have to find minimum *k* such that there exists at least one *k*-dominant character.
The first line contains string *s* consisting of lowercase Latin letters (1 ≤ |*s*| ≤ 100000).
none
abacaba
2
zzzzz
1
abcde
3
bcaccacaaabaacaabaaabcbbcbcaacacbcbaaaacccacbbcbaabcbacaacbabacacacaccbbccbcbacbbbbccccabcabaaab
8
daabcdabbabbacacbaacabacbcaabaacac
4
abghim
4
gfliflgfhhdkceacdljgkegmdlhcgkcmlelmbbbmdddgdeeljjhgbbffmemmmkhebgkhadkdajabcjkcgbkgbaeacdedlkklfech
17
a
1
aaabbb
4
ab
2
abbb
2
ob
2
abccba
3
saaaaaaaas
2
axxx
2
abcba
2
abb
2
abcdea
4
axcbb
3
tmivvdcbbfrfogjviirrximhttoskopwrcmkcborcxvr
13
dlchmmuateksgldkckljrovmeuniobjrelqjpnjljlvhpqrjsfklliqpufplgaelevmlcnodbllquubobecem
15
zx
2
zxz
2
bbhdgaefbhf
6
xx
1
zxx
2
cbcada
4
z
1
aab
2
jficc
3
cceeaabfba
5
jk
2
lzeznbwu
5
rr
1
def check(st, mid, a): 
	n = len(st)
	previous = -1
	for i in range(n): 
		if (st[i] == chr(a)): 
			if (i - previous > mid): 
				return False
			
			previous = i	 
	if (i - previous > mid): 
		return False
	else: 
		return True
def possible(st, mid): 
	for i in range(26): 
		if (check(st, mid, i + ord('a'))): 
			return True
	return False
def findMinLength(st): 
	low = 1
	high = len(st) 
	while (low <= high):
		mid = (low + high) // 2
		if (possible(st, mid)): 
			high = mid - 1
		else: 
			low = mid + 1
	return high + 1
def ifAllDistinct( st): 

	s = [] 
	for c in st: 
		s.append(c) 
	
	return len(set(s)) == len(st) 
st = input()
if (ifAllDistinct(st)): 
	if len(st)<=2:
	    print(len(st))
	else:
	    print(len(st)//2+1)
else: 
		print(findMinLength(st)) 


