#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define f(i,a,b) for(int i = a;i < b;i++) #define pb push_back #define itr iterator #define get(t) int t;cin >> t; #define fi first #define se second #define mp make_pair #define foreach(it,x) for(__typeof(x.begin()) it=x.begin();it!=x.end(); it++) #define all(x) x.begin(),x.end() typedef long long ll; typedef vector vi; typedef vector > vii; typedef vector vd; inline void sfr (int *a) { char c = 0; while(c<33) c = fgetc(stdin); *a = 0; while(c>33) { *a = *a*10 + c - '0'; c = fgetc(stdin); } } inline void sfp(int a){ char c[1000]; sprintf(c,"%d",a); puts(c); } char s[100000], st[100000]; int n, i, sp, ret, kol[5], t; int subtask1(string s){ n = s.length(); vector A(n,0); int cnt = 0; f(i,0,n){ if(s[i] == 'F'){ vector P; P.pb(i); int st = 1; for(int j = i-1;j >= 0;j--){ if(st == 1 && s[j] == 'E' && A[j] == 0){ st++; P.pb(j); } if(st == 2 && s[j] == 'H' && A[j] == 0){ st++; P.pb(j); } if(st == 3 && s[j] == 'C' && A[j] == 0){ st++; P.pb(j); break; } } if(st == 4){ cnt++; f(i,0,P.size()){ A[P[i]] = 1; } } } } return cnt; } int subtask2(string s){ kol[0] = n + 1; for(i = 0; i < n; i++) { if (s[i] == 'C') t = 1; else if (s[i] == 'H') t = 2; else if (s[i] == 'E') t = 3; else if (s[i] == 'F') t = 4; else t = 0; if (!t) continue; if (kol[t - 1]) { --kol[t - 1]; ++kol[t]; } } return kol[4]; } int main(){ string s; cin >> s; if(s.length() <= 2000){ cout << subtask1(s) << endl; } else cout << subtask2(s) << endl; }