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 Pascal (FPC 3.0.4) (judge verdict: Output Limit Exceeded)

program taskC;
var
    s, t, c, a : ansistring;
    i : longint;
    pre : boolean;
    
begin
    readln(s);
    a := s;
    t := '';
    pre := true;
    while (pre = true) do
    begin
        writeln(a);
        pre := false;
        c := copy(a,1,5);
        if (c = 'dream') and (pre = false) and ((length(a) = 5) or (((a[6] = 'e') and (a[8] = 'a')) or (a[6] = 'd'))) then
        begin
            pre := true;
            t := t + c;
            delete(a,1,5);
        end;
         c := copy(a,1,5);
        if (c = 'erase') and (pre = false) and ((length(a) = 5) or (((a[6] = 'e') and (a[8] = 'a')) or (a[6] = 'd'))) then
        begin
            pre := true;
            t := t + c;
            delete(a,1,5);
        end;
        c := copy(a,1,6);
        if (c = 'eraser') and (pre = false) and ((length(a) = 6) or (((a[7] = 'e') and (a[9] = 'a')) or (a[7] = 'd')))then
        begin
            pre := true;
            t := t + c;
            delete(a,1,6); 
        end;
        c := copy(a,1,7);
        if (c = 'dreamer') and (pre = false) and ((length(a) = 7) or (((a[8] = 'e') and (a[10] = 'a')) or (a[8] = 'd'))) then
        begin
            pre := true;
            t := t + c;
            delete(a,1,7);
        end;
    end;
    //writeln(t);
    if s = t then
    begin
        writeln('YES')
    end
    else 
    begin
        writeln('NO');
    end;
end.