Vasya has recently learned to type and log on to the Internet. He immediately entered a chat room and decided to say hello to everybody. Vasya typed the word *s*. It is considered that Vasya managed to say hello if several letters can be deleted from the typed word so that it resulted in the word "hello". For example, if Vasya types the word "ahhellllloou", it will be considered that he said hello, and if he types "hlelo", it will be considered that Vasya got misunderstood and he didn't manage to say hello. Determine whether Vasya managed to say hello by the given word *s*.
The first and only line contains the word *s*, which Vasya typed. This word consisits of small Latin letters, its length is no less that 1 and no more than 100 letters.
from sys import path_hooks, stdin, stdout
from collections import Counter,deque
# import math
# from copy import deepcopy
# import random
# import heapq
# from itertools import permutations, product, repeat
# from time import time

# from bisect import bisect_left
# from bisect import bisect_right
# from re import A, findall
# from fractions import Fraction
# from typing import DefaultDict


def mapinput():
    return  map(int, stdin.readline().split())

def strinput():
    return stdin.readline().strip()

def listinput():
    return list(map(int,stdin.readline().split()))

def intinput():
    return int(stdin.readline().strip())



# int(stdin.readline().strip())
# stdin.readline().strip()
# list(map(int,stdin.readline().split()))
# map(int,stdin.readline().split())
'''
n = int(stdin.readline())
s = stdin.readline().strip()
n, k = map(int, stdin.readline().split())
arn = list(map(int, stdin.readline().split()))
'''

def gcd(a,b):
    if(b==0):
        return a
    else:
        return gcd(b,a%b)

def SieveOfEratosthenes(n):
    prime = [True for i in range(n + 1)]
    p = 2
    while (p * p <= n):
        if (prime[p] == True):
            for i in range(p * 2, n + 1, p):
                prime[i] = False
        p += 1
    prime[0]= False
    prime[1]= False
    ans = []
    for p in range(n + 1):
        if prime[p]:
            ans.append(p)
    return ans

# t = time()
# primes = SieveOfEratosthenes(5000002)

# spprime = set([2,3,5,7])
# for i in primes:
#     if i//10 in spprime:
#         spprime.add(i)

# spprime = list(spprime)
# spprime.sort()

#print(time() - t)

#spprime = [2, 3, 5, 7, 23, 29, 31, 37, 53, 59, 71, 73, 79, 233, 239, 293, 311, 313, 317, 373, 379, 593, 599, 719, 733, 739, 797, 2333, 2339, 2393, 2399, 2939, 3119, 3137, 3733, 3739, 3793, 3797, 5939, 7193, 7331, 7333, 7393, 23333, 23339, 23399, 23993, 29399, 31193, 31379, 37337, 37339, 37397, 59393, 59399, 71933, 73331, 73939, 233993, 239933, 293999, 373379, 373393, 593933, 593993, 719333, 739391, 739393, 739397, 739399, 2339933, 2399333, 2939999, 3733799]
#spprimeset = set(spprime)

def writ(ss):
    stdout.write(str(ss) + "\n")

mod = (10 **9) + 7

def binaryr(arr,point,target):
    low = 0
    high = point
    while low <= high:
        mid = (low+high)//2
        if arr[mid] == target:
            return mid 
        elif arr[mid] < target:
            low = mid + 1 
        else:
            high = mid - 1
    return low 

def binaryl(arr,point,target):
    low = 0
    high = point
    while low <= high:
        mid = (low+high)//2
        if arr[mid] == target:
            return mid 
        elif arr[mid] < target:
            low = mid + 1 
        else:
            high = mid - 1
    return high

def sump(n):
    return (n * (n+1)) // 2 


def solve():
    s = strinput()
    if len(s) < 6:
        return "NO"
    s = Counter(s)
    if s["h"] >= 1 and s["e"]>= 1 and s['l']>= 2 and s["o"]>= 1:
        return "YES"
    return "NO"


for test in range(1):
    print(solve())
    

