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: Wrong Answer)

"use strict";

var main = function main(input) {
  var revInput = input.trim().split('').reverse().join('');
  var flag = true;

  for (var i = 0; i < revInput.length; i++) {
    if (revInput.charAt(i) == 'm') {
      if (revInput.slice(i, i + 5) === 'maerd') {
        i += 4;
      } else {
        flag = false;
        break;
      }
    } else if (revInput.charAt(i) == 'e') {
      if (revInput.slice(i, i + 5) === 'esare') {
        i += 4;
      } else {
        flag = false;
        break;
      }
    } else if (revInput.charAt(i) == 'r') {
      if (revInput.slice(i, i + 6) === 'resare') {
        i += 5;
      } else if (revInput.slice(i, i + 7) === 'remaerd') {
        i += 6;
      } else {
        flag = false;
        break;
      }
    }
  }

  console.log(flag == true ? 'Yes' : 'No');
};

main(require('fs').readFileSync('/dev/stdin', 'utf-8'));