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 Fortran (gfortran v4.8.4) (judge verdict: Wrong Answer)

      PROGRAM daydream
      IMPLICIT NONE
      CHARACTER (10**5):: s
      INTEGER :: index,Ls(4),N,i
      LOGICAL :: flag
      CHARACTER(7) :: a(4)
      
      READ*,s
      
      a = (/'dreamer','dream  ','eraser ','erase  '/)
      Ls = (/7,5,6,5/)
      
      
      N = len_trim( s )
      
      index = 1
      outer:DO while(.TRUE.)
        inner:DO i = 1,4
          IF(index+Ls(i)-1<=N)THEN
            IF( trim(a(i))==s(index:index+Ls(i)-1) )THEN
              index = index + Ls(i)
              
              IF(index-1==N)THEN
                flag = .true.
                EXIT outer
              END IF
              CYCLE outer
              
            END IF
          END IF
        END DO inner
        flag = .false.
        EXIT outer
        
      END DO outer
      
      IF(flag)THEN
        print'(A)','YES'
      ELSE
        print'(A)','NO'
      END IF
      
      
      END PROGRAM