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 JavaScript (node.js v5.12) (judge verdict: Runtime Error)

'use strict';
function main(input) {
    var reverse = input.trim().split('').reverse().join('')
    var words = ['dream', 'dreamer', 'erase' ,'eraser']
    var rws = words.map(a=>a.split('').reverse().join(''))
    let index = 0
	while (true) {
      const f = rws.find(a=>rws.startsWith(a,index))
      if(!f) break
      index = index + f.length
      if(index === rws.length) {
        console.log('YES')
      }else{
        console.log('NO')
      }
    }
main(require('fs').readFileSync('/dev/stdin', 'utf8'));