import java.util.Arrays;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
		
		Scanner keyboard = new Scanner(System.in); 
		
		String S  = keyboard.next();
		String ans = "YES";
		
		for(int i = 0; i < S.length();) {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		}

		System.out.println(ans);
		keyboard.close();	
	}
} import java.util.Arrays; Arrays java.util import java.util.Scanner; Scanner java.util public class Main {
public static void main(String[] args) {
		
		Scanner keyboard = new Scanner(System.in); 
		
		String S  = keyboard.next();
		String ans = "YES";
		
		for(int i = 0; i < S.length();) {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		}

		System.out.println(ans);
		keyboard.close();	
	}
} Main public static void main(String[] args) {
		
		Scanner keyboard = new Scanner(System.in); 
		
		String S  = keyboard.next();
		String ans = "YES";
		
		for(int i = 0; i < S.length();) {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		}

		System.out.println(ans);
		keyboard.close();	
	} main {
		
		Scanner keyboard = new Scanner(System.in); 
		
		String S  = keyboard.next();
		String ans = "YES";
		
		for(int i = 0; i < S.length();) {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		}

		System.out.println(ans);
		keyboard.close();	
	} Scanner keyboard = new Scanner(System.in); keyboard new Scanner(System.in) String S  = keyboard.next(); S keyboard.next() keyboard.next keyboard String ans = "YES"; ans "YES" for(int i = 0; i < S.length();) {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		} int i = 0; int i = 0; i 0 i < S.length() i S.length() S.length S {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		} {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		} if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			} S.length() - i >= 5 S.length() - i S.length() S.length S i 5 {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			} if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				} S.substring(i,i+5).equals("dream") S.substring(i,i+5).equals S.substring(i,i+5) S.substring S i i+5 i 5 "dream" {
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				} if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						} S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era") S.length()-(i+5) >= 3 S.length()-(i+5) S.length() S.length S (i+5) i 5 3 S.substring(i+5,i+8).equals("era") S.substring(i+5,i+8).equals S.substring(i+5,i+8) S.substring S i+5 i 5 i+8 i 8 "era" {
						i += 5;
						continue;
					} i += 5 i 5 continue; if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						} S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er") S.length()-(i+5) >= 2 S.length()-(i+5) S.length() S.length S (i+5) i 5 2 S.substring(i+5,i+7).equals("er") S.substring(i+5,i+7).equals S.substring(i+5,i+7) S.substring S i+5 i 5 i+7 i 7 "er" {
						i += 7;
						continue;
					} i += 7 i 7 continue; {
						i += 5;
						continue;
						} i += 5 i 5 continue; if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				} S.substring(i,i+5).equals("erase") S.substring(i,i+5).equals S.substring(i,i+5) S.substring S i i+5 i 5 "erase" {
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				} if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						} S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r") S.length()-(i+5) >= 1 S.length()-(i+5) S.length() S.length S (i+5) i 5 1 S.substring(i+5,i+6).equals("r") S.substring(i+5,i+6).equals S.substring(i+5,i+6) S.substring S i+5 i 5 i+6 i 6 "r" {
						i += 6;
						continue;
					} i += 6 i 6 continue; {
						i += 5;
						continue;
						} i += 5 i 5 continue; {
					ans = "NO";
					break;
				} ans = "NO" ans "NO" break; {
				ans = "NO";
				break;
			} ans = "NO" ans "NO" break; System.out.println(ans) System.out.println System.out System System.out ans keyboard.close() keyboard.close keyboard String[] args args public class Main {
public static void main(String[] args) {
		
		Scanner keyboard = new Scanner(System.in); 
		
		String S  = keyboard.next();
		String ans = "YES";
		
		for(int i = 0; i < S.length();) {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		}

		System.out.println(ans);
		keyboard.close();	
	}
} public class Main {
public static void main(String[] args) {
		
		Scanner keyboard = new Scanner(System.in); 
		
		String S  = keyboard.next();
		String ans = "YES";
		
		for(int i = 0; i < S.length();) {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		}

		System.out.println(ans);
		keyboard.close();	
	}
} Main
import java.util.Arrays;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
		
		Scanner keyboard = new Scanner(System.in); 
		
		String S  = keyboard.next();
		String ans = "YES";
		
		for(int i = 0; i < S.length();) {
			if(S.length() - i >= 5) {
			//ここまでの判定に使った文字の残りが単語の文字数を充足する場合	に処理	
				if(S.substring(i,i+5).equals("dream")){
					if(S.length()-(i+5) >= 3 && S.substring(i+5,i+8).equals("era")) {
						i += 5;
						continue;
					}else if(S.length()-(i+5) >= 2 && S.substring(i+5,i+7).equals("er")) {
						i += 7;
						continue;
					}else {
						i += 5;
						continue;
						}
				}else if(S.substring(i,i+5).equals("erase")){
					if(S.length()-(i+5) >= 1 && S.substring(i+5,i+6).equals("r")) {
						i += 6;
						continue;
					}else {
						i += 5;
						continue;
						}
				//文字列が単語を成さなかった場合
				}else {
					ans = "NO";
					break;
				}
			//文字の残りが単語の文字数を充足しない場合				
			}else{
				ans = "NO";
				break;
			}
		}

		System.out.println(ans);
		keyboard.close();	
	}
}
