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 2.6.2) (judge verdict: Accepted)

var cc,so: ansistring ;
    a,b,c,d,e,f,g,gg,yo : longint ;
begin
 readln(cc);
 a:=length(cc);
 while (gg=0)and(yo=0) do
  begin
   so:='';
   for b:=a-4 to a do
    so:=so+cc[b];
//   writeln(so);
   a:=a-5;
   if so='dream' then
    a:=a
   else if so='erase' then
    a:=a
   else if so='raser' then
    begin
     if a>=1 then
      begin
       if (cc[a]='e')then
        a:=a-1
       else
        gg:=1;
      end
     else
      gg:=1;
    end
   else if so='eamer'then
    begin
     if a>=2 then
      begin
       if (cc[a]='r')and(cc[a-1]='d') then
        a:=a-2
       else
        gg:=1;
      end
     else
      gg:=1;
    end
   else
    gg:=1;
   if a=0 then
    yo:=1
   else if a<5 then
    gg:=1

//   writeln(cc[a-1],a:2);
  end;
 if yo=1 then
 writeln('YES')
 else if gg=1 then
  writeln('NO');

end.