Problem:
Score : 300 points

Problem Statement

You are given a string S consisting of lowercase English letters.
Another string T is initially empty.
Determine whether it is possible to obtain S = T by performing the following operation an arbitrary number of times:

Append one of the following at the end of T: dream, dreamer, erase and eraser.

Constraints

1≦|S|≦10^5

S consists of lowercase English letters.

Input

The input is given from Standard Input in the following format:

S

Output

If it is possible to obtain S = T, print YES. Otherwise, print NO.

Sample Input 1

erasedream

Sample Output 1

YES

Append erase and dream at the end of T in this order, to obtain S = T.

Sample Input 2

dreameraser

Sample Output 2

YES

Append dream and eraser at the end of T in this order, to obtain S = T.

Sample Input 3

dreamerer

Sample Output 3

NO

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<string.h>
int main()
{
    char s[1000001];
    scanf("%s",s);
    long int len=strlen(s);
    int flag=0;
    while(flag==0 && len>0)
    {
        if(s[len]=='m')
        {
            if(s[len-1]!='a' || s[len-2]!='e' || s[len-3]!='r' || s[len-4]!='d')
            {
                flag=1;
            }
            else
            {
                len=len-5;
            }
        }
        else if(s[len]=='r' && s[len-1]=='e')
        {
            if(s[len-2]=='m')
            {
                if(s[len-3]!='a' || s[len-4]!='e' || s[len-5]!='r' || s[len-6]!='d')
                {
                    flag=1;
                }
                else
                {
                    len=len-7;
                }
            }
            else if(s[len-2]=='s')
            {
                if(s[len-3]!='a' || s[len-4]!='r' || s[len-5]!='e')
                {
                    flag=1;
                }
                else
                {
                    len=len-6;
                }
            }
            else
            {
                flag=1;
            }
        }
        else if(s[len]=='e')
        {
            if(s[len-1]!='s' || s[len-2]!='a' || s[len-3]!='r' || s[len-4]!='e')
            {
                flag=1;
            }
            else
            {
                len=len-5;
            }
        }
        else
        {
            flag=1;
        }
    }
    if(flag==0)
    {
        printf("YES\n");
    }
    else
    {
        printf("NO\n");
    }
}