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 C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
class Program
{
	static void Main()
	{
    int c = 0;//チェック済みの文字数
	string s = Console.ReadLine();
    string check;
      
      while(true)
      {
      check = "";
      int loop = 0;
        for(int j = 4;j <= 6;j++)
        {
     	 for(int i = j;i>=0;i--)
     	 {
     	   check += s[s.Length-i-c-1];
     	 }
      if(check == "dream")c+=5;
      else if(check == "erase")c+=5;
      else if(check == "eraser")c+=6;
      else if(check == "dreamer")c+=7;
      else if(c == s.Length)
      	 {
     	  Console.WriteLine("YES");
     	  break;
     	 }
      else loop ++;
        }
        if(loop == 2)
          {
     	  Console.WriteLine("NO");
     	  break;
     	  }
      }
        

	}
}