import bisect
s=input().strip()
heavy=[]
metal=[]
i=0
while(i<len(s)-4):
if(s[i:i+5]=='heavy'):
heavy.append(i)
elif(s[i:i+5]=='metal'):
metal.append(i)
i+=1
count=0
i=0
j=0
while(j<len(metal) and i<len(heavy)):
if(heavy[i]<metal[j] and metal[j]-heavy[i]>=5):
count+=(len(metal)-j)
i+=1
elif(metal[j]<heavy[i]):
j+=1
print(count)
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string s;
cin >> s;
long long heavy(0), amount(0);
for (int i = 0; i < min(s.length() - 4, s.length()); i++)
{
if (s.substr(i, 5) == "heavy")
{
heavy++;
}
else if (s.substr(i, 5) == "metal")
{
amount += heavy;
}
}
cout << amount << endl;
return 0;
}
509A - Maximum in Table | 1647C - Madoka and Childish Pranks |
689B - Mike and Shortcuts | 379B - New Year Present |
1498A - GCD Sum | 1277C - As Simple as One and Two |
1301A - Three Strings | 460A - Vasya and Socks |
1624C - Division by Two and Permutation | 1288A - Deadline |
1617A - Forbidden Subsequence | 914A - Perfect Squares |
873D - Merge Sort | 1251A - Broken Keyboard |
463B - Caisa and Pylons | 584A - Olesya and Rodion |
799A - Carrot Cakes | 1569B - Chess Tournament |
1047B - Cover Points | 1381B - Unmerge |
1256A - Payment Without Change | 908B - New Year and Buggy Bot |
979A - Pizza Pizza Pizza | 731A - Night at the Museum |
742A - Arpa’s hard exam and Mehrdad’s naive cheat | 1492A - Three swimmers |
1360E - Polygon | 1517D - Explorer Space |
1230B - Ania and Minimizing | 1201A - Important Exam |