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 Common Lisp (SBCL 1.1.14) (judge verdict: Wrong Answer)

(defun daydream-with (str start)
  (let* ((len (min 7 (- (length str) start)))
         (seven (subseq str start (+ start len)))
         (dreamer (string>= "dreamer" seven)))
    (if (and dreamer (= dreamer 7))
      7
      (if (and dreamer (= dreamer 5))
        5
        (let ((eraser (string>= "eraser" seven)))
          (if (and eraser (= eraser 6))
            6
            (if (and eraser (= eraser 5))
              5
              nil)))))))

(let* ((s (read-line))
       (len (length s))
       (r 0))
  (loop for i = (daydream-with s r)
        if (null i) do (return)
        else do (incf r i)
        while (>= len r))
  (if (>= r len)
    (format t "YES~%")
    (format t "NO~%")))