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 Kotlin (1.0.0) (judge verdict: Wrong Answer)

fun main(args: Array<String>) {
    val S = readLine()!!
    var T = ""
    var ans = "NO"
    val length = S.length

    var i = 0
    while (i < length) {
        // 最初がdかeじゃなければ終了。また文字列長が不十分な場合も終了。
        if(S[i] == 'd' && length - i >= 5){
            // dreamとなっているか調べる
            if(S[i+1] == 'r' && S[i+2] == 'e' && S[i+3] == 'a' && S[i+4] == 'm') {
                // dreamかdreamerかを調べる
                // 文字列の終端か次の文字がe以外だったらdream
                if(i+4 == length - 1 || S[i+5] != 'e') {
                    i += 5
                } else if(length - i >= 7 && S[i+5] == 'e' && S[i+6] == 'r') {
                    i += 7
                } else break;
            } else break;
        } else if(S[i] == 'e' && length - i >= 5) {
            // erasとなっているか調べる
            if(S[i+1] == 'r' && S[i+2] == 'a' && S[i+3] == 's' && S[i+4] == 'e') {
                // eraseかeraserかを調べる
                // 文字列の終端か次の文字がr以外だったらerase
                if(i+4 == length -1 || S[i+5] != 'r')
                {
                    i += 5
                } else if(length - i >= 6 && S[i+5] == 'r') {
                    i += 6
                } else break;
            } else break;
        } else break;
    }

    if(i == S.length) ans = "YES"

    println(ans)
}