import java.util.ArrayDeque;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Main main = new Main();
		main.run();
	}

	String S;
	StringBuilder T = new StringBuilder();
	String P[] = {"dream", "dreamer", "erase", "eraser"};

	public void run() {
		Scanner sc = new Scanner(System.in);
		S = sc.next();

		ArrayDeque<Integer> stack = new ArrayDeque<Integer>();
		stack.push(0);
		boolean ans = false;
		while(!stack.isEmpty()) {
			int i = stack.pop();
			if(i == S.length()) {
				ans = true;
				break;
			}
			for(int j=0; j<4; j++) {
				if(i+P[j].length() <= S.length() && P[j].equals(S.substring(i, i+P[j].length()))) {
					stack.push(i+P[j].length());
				}
			}
		}

		if(ans) System.out.println("YES");
		else System.out.println("NO");

		sc.close();
	}
}
/tmp/hf-datasets-cache/medium/datasets/42704881117311-config-parquet-and-info-qiankunmu-Project_CodeNet-896c9d36/hub/datasets--qiankunmu--Project_CodeNet_Python800_and_Java250/snapshots/c899fde44a77ba1cc14973ed3de064e4ff3aadc7/Project_CodeNet_Java250.tar.gz