#include <cstdio>
#include <cstring>
const int inf = (1 << 30) - 1;

// 尺取法
// 求字符串的子串中恰好含有2个h,1个i,1个o的最短子串长度
bool check(char w[], int i, int j){
int c1 = 0,c2 = 0,c3 = 0;
for (int k = i; k <= j; ++k) {
if(w[k] == 'h') c1++;
if(w[k] == 'i') c2++;
if(w[k] == 'o') c3++;
}

return c1==2 && c2==1 && c3==1;
}

bool containsAll(char w[], int i, int j){
int c1 = 0,c2 = 0,c3 = 0;
for (int k = i; k <= j; ++k) {
if(w[k] == 'h') c1++;
if(w[k] == 'i') c2++;
if(w[k] == 'o') c3++;
}

return c1>=2 && c2>=1 && c3>=1;
}

bool check(char c){
return c == 'h' || c == 'i' || c == 'o';
}


void solve(char w[]){

int min = inf;
int j;
int n = strlen(w); // 求字符数组长度

printf("n: %d\n", n);
// i是待扫描字符串的前面
for (int i = 0; i < n; ++i) {
char c = w[i];
if(check(c)){
j = i + 1;
while (j < n){
char c2 = w[j];
if(check(c2)&&containsAll(w, i, j)){
if(check(w, i, j) && min > (j - i + 1)){
min = j - i + 1;
}
break;
}
j++;
}
}
}

min = min==inf?-1:min;

printf("%d\n", min);
}

int main(){

char s[] = "";
scanf("%s", s);
printf("%s\n", s);
solve(s);

int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

// 求数组长度(除了字符类型)
printf("%d", sizeof(a) / sizeof(a[0]));
return 0;
}