fun main(args: Array<String>)
{
    var s = readString().reversed()
    val words = listOf("dream", "dreamer", "erase", "eraser").map{ it.reversed() }

    var flag = true
    while(flag && s.length > 0)
    {
        val containFlag = if (s.take(words[0].length) == words[0])
        {
            0
        }
        else if (s.take(words[1].length) == words[1])
        {
            1
        }
        else if (s.take(words[2].length) == words[2])
        {
            2
        }
        else if (s.take(words[3].length) == words[3])
        {
            3
        }
        else
        {
            -1
        }
        
        if (containFlag != -1)
        {
            s = s.drop(words[containFlag].length)
        }
        else
        {
            flag = false
        }
    }

    println(if (flag) "YES" else "NO")
}

// Read an integer
// Usage: val a = readInt()
fun readInt() = readLine()!!.toInt()

// Read N integers separated by " "
// Usage: val (a, b, c) = readNInts()
fun readNInts() = readLine()!!.split(" ").map(String::toInt)

// Read a string
// Usage: val a = readString()
fun readString() = readLine()!!
