import java.io.IOException;
import java.io.InputStream;
import java.util.InputMismatchException;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		Task task = new Task();
		task.solve();
	}

	public static class Task {
		static final long MOD = (long) 1e9 + 7;
		static char[] carr;
		static int n;

		public void solve() {
			Scan sc = new Scan();
			carr = sc.scanString().toCharArray();
			n = carr.length;
			boolean got = check(n, n);
			System.out.println(got ? "YES" : "NO");
		}

		boolean check(int i, int j) {
			if (j < 0)
				return true;
			if (i < 0)
				return false;
			int len = j - i + 1;
			boolean good = false;
			if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true;
			if (!good)
				return false;
			good = check(i - 5, i - 1);
			if (good)
				return good;
			good = check(i - 6, i - 1);
			if (good)
				return good;
			good = check(i - 7, i - 1);
			return good;
		}
	}

	public static class Scan {
		private byte[] buf = new byte[1024];
		private int index;
		private InputStream in;
		private int total;

		public Scan() {
			in = System.in;
		}

		public int scan() {
			if (total < 0)
				throw new InputMismatchException();
			if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			}
			return buf[index++];
		}

		public long scanLong() {
			long integer = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			return neg * integer;
		}

		public double scanDouble() throws IOException {
			double doub = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			}
			return doub * neg;
		}

		public String scanString() {
			StringBuilder sb = new StringBuilder();
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			}
			return sb.toString();
		}

		public char scanChar() {
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			return (char) n;
		}

		private boolean isWhiteSpace(int n) {
			if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true;
			return false;
		}
	}
} import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.util.InputMismatchException; InputMismatchException java.util import java.util.List; List java.util public class Main {

	public static void main(String[] args) {
		Task task = new Task();
		task.solve();
	}

	public static class Task {
		static final long MOD = (long) 1e9 + 7;
		static char[] carr;
		static int n;

		public void solve() {
			Scan sc = new Scan();
			carr = sc.scanString().toCharArray();
			n = carr.length;
			boolean got = check(n, n);
			System.out.println(got ? "YES" : "NO");
		}

		boolean check(int i, int j) {
			if (j < 0)
				return true;
			if (i < 0)
				return false;
			int len = j - i + 1;
			boolean good = false;
			if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true;
			if (!good)
				return false;
			good = check(i - 5, i - 1);
			if (good)
				return good;
			good = check(i - 6, i - 1);
			if (good)
				return good;
			good = check(i - 7, i - 1);
			return good;
		}
	}

	public static class Scan {
		private byte[] buf = new byte[1024];
		private int index;
		private InputStream in;
		private int total;

		public Scan() {
			in = System.in;
		}

		public int scan() {
			if (total < 0)
				throw new InputMismatchException();
			if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			}
			return buf[index++];
		}

		public long scanLong() {
			long integer = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			return neg * integer;
		}

		public double scanDouble() throws IOException {
			double doub = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			}
			return doub * neg;
		}

		public String scanString() {
			StringBuilder sb = new StringBuilder();
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			}
			return sb.toString();
		}

		public char scanChar() {
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			return (char) n;
		}

		private boolean isWhiteSpace(int n) {
			if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true;
			return false;
		}
	}
} Main public static void main(String[] args) {
		Task task = new Task();
		task.solve();
	} main {
		Task task = new Task();
		task.solve();
	} Task task = new Task(); task new Task() task.solve() task.solve task String[] args args public static class Task {
		static final long MOD = (long) 1e9 + 7;
		static char[] carr;
		static int n;

		public void solve() {
			Scan sc = new Scan();
			carr = sc.scanString().toCharArray();
			n = carr.length;
			boolean got = check(n, n);
			System.out.println(got ? "YES" : "NO");
		}

		boolean check(int i, int j) {
			if (j < 0)
				return true;
			if (i < 0)
				return false;
			int len = j - i + 1;
			boolean good = false;
			if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true;
			if (!good)
				return false;
			good = check(i - 5, i - 1);
			if (good)
				return good;
			good = check(i - 6, i - 1);
			if (good)
				return good;
			good = check(i - 7, i - 1);
			return good;
		}
	} Task static final long MOD = (long) 1e9 + 7; MOD (long) 1e9 + 7 (long) 1e9 7 static char[] carr; carr static int n; n public void solve() {
			Scan sc = new Scan();
			carr = sc.scanString().toCharArray();
			n = carr.length;
			boolean got = check(n, n);
			System.out.println(got ? "YES" : "NO");
		} solve {
			Scan sc = new Scan();
			carr = sc.scanString().toCharArray();
			n = carr.length;
			boolean got = check(n, n);
			System.out.println(got ? "YES" : "NO");
		} Scan sc = new Scan(); sc new Scan() carr = sc.scanString().toCharArray() carr sc.scanString().toCharArray() sc.scanString().toCharArray sc.scanString() sc.scanString sc n = carr.length n carr.length carr carr.length boolean got = check(n, n); got check(n, n) check n n System.out.println(got ? "YES" : "NO") System.out.println System.out System System.out got ? "YES" : "NO" got "YES" "NO" boolean check(int i, int j) {
			if (j < 0)
				return true;
			if (i < 0)
				return false;
			int len = j - i + 1;
			boolean good = false;
			if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true;
			if (!good)
				return false;
			good = check(i - 5, i - 1);
			if (good)
				return good;
			good = check(i - 6, i - 1);
			if (good)
				return good;
			good = check(i - 7, i - 1);
			return good;
		} check {
			if (j < 0)
				return true;
			if (i < 0)
				return false;
			int len = j - i + 1;
			boolean good = false;
			if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true;
			if (!good)
				return false;
			good = check(i - 5, i - 1);
			if (good)
				return good;
			good = check(i - 6, i - 1);
			if (good)
				return good;
			good = check(i - 7, i - 1);
			return good;
		} if (j < 0)
				return true; j < 0 j 0 return true; true if (i < 0)
				return false; i < 0 i 0 return false; false int len = j - i + 1; len j - i + 1 j - i j i 1 boolean good = false; good false if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true; i < n i n {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} String s = new String(carr, i, len); s new String(carr, i, len) if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase"); !good && len == 5 !good good len == 5 len 5 good = s.equals("dream") || s.equals("erase") good s.equals("dream") || s.equals("erase") s.equals("dream") s.equals s "dream" s.equals("erase") s.equals s "erase" if (!good && len == 6)
					good = s.equals("eraser"); !good && len == 6 !good good len == 6 len 6 good = s.equals("eraser") good s.equals("eraser") s.equals s "eraser" if (!good && len == 7)
					good = s.equals("dreamer"); !good && len == 7 !good good len == 7 len 7 good = s.equals("dreamer") good s.equals("dreamer") s.equals s "dreamer" good = true good true if (!good)
				return false; !good good return false; false good = check(i - 5, i - 1) good check(i - 5, i - 1) check i - 5 i 5 i - 1 i 1 if (good)
				return good; good return good; good good = check(i - 6, i - 1) good check(i - 6, i - 1) check i - 6 i 6 i - 1 i 1 if (good)
				return good; good return good; good good = check(i - 7, i - 1) good check(i - 7, i - 1) check i - 7 i 7 i - 1 i 1 return good; good int i i int j j public static class Scan {
		private byte[] buf = new byte[1024];
		private int index;
		private InputStream in;
		private int total;

		public Scan() {
			in = System.in;
		}

		public int scan() {
			if (total < 0)
				throw new InputMismatchException();
			if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			}
			return buf[index++];
		}

		public long scanLong() {
			long integer = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			return neg * integer;
		}

		public double scanDouble() throws IOException {
			double doub = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			}
			return doub * neg;
		}

		public String scanString() {
			StringBuilder sb = new StringBuilder();
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			}
			return sb.toString();
		}

		public char scanChar() {
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			return (char) n;
		}

		private boolean isWhiteSpace(int n) {
			if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true;
			return false;
		}
	} Scan private byte[] buf = new byte[1024]; buf new byte[1024] 1024 private int index; index private InputStream in; in private int total; total public Scan() {
			in = System.in;
		} Scan {
			in = System.in;
		} in = System.in in System.in System System.in public int scan() {
			if (total < 0)
				throw new InputMismatchException();
			if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			}
			return buf[index++];
		} scan {
			if (total < 0)
				throw new InputMismatchException();
			if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			}
			return buf[index++];
		} if (total < 0)
				throw new InputMismatchException(); total < 0 total 0 throw new InputMismatchException(); new InputMismatchException() if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			} index >= total index total {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			} index = 0 index 0 try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				} catch (IOException e) {
					throw new RuntimeException(e);
				} IOException e {
					throw new RuntimeException(e);
				} throw new RuntimeException(e); new RuntimeException(e) {
					total = in.read(buf);
				} total = in.read(buf) total in.read(buf) in.read in buf if (total <= 0)
					return -1; total <= 0 total 0 return -1; -1 1 return buf[index++]; buf[index++] buf index++ index public long scanLong() {
			long integer = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			return neg * integer;
		} scanLong {
			long integer = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			return neg * integer;
		} long integer = 0; integer 0 int n = scan(); n scan() scan while (isWhiteSpace(n))
				n = scan(); isWhiteSpace(n) isWhiteSpace n n = scan() n scan() scan int neg = 1; neg 1 if (n == '-') {
				neg = -1;
				n = scan();
			} n == '-' n '-' {
				neg = -1;
				n = scan();
			} neg = -1 neg -1 1 n = scan() n scan() scan while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			} !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			} if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException(); n >= '0' && n <= '9' n >= '0' n '0' n <= '9' n '9' {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} integer *= 10 integer 10 integer += n - '0' integer n - '0' n '0' n = scan() n scan() scan throw new InputMismatchException(); new InputMismatchException() return neg * integer; neg * integer neg integer public double scanDouble() throws IOException {
			double doub = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			}
			return doub * neg;
		} scanDouble {
			double doub = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			}
			return doub * neg;
		} double doub = 0; doub 0 int n = scan(); n scan() scan while (isWhiteSpace(n))
				n = scan(); isWhiteSpace(n) isWhiteSpace n n = scan() n scan() scan int neg = 1; neg 1 if (n == '-') {
				neg = -1;
				n = scan();
			} n == '-' n '-' {
				neg = -1;
				n = scan();
			} neg = -1 neg -1 1 n = scan() n scan() scan while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			} !isWhiteSpace(n) && n != '.' !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n n != '.' n '.' {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			} if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException(); n >= '0' && n <= '9' n >= '0' n '0' n <= '9' n '9' {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} doub *= 10 doub 10 doub += n - '0' doub n - '0' n '0' n = scan() n scan() scan throw new InputMismatchException(); new InputMismatchException() if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			} n == '.' n '.' {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			} n = scan() n scan() scan double temp = 1; temp 1 while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				} !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				} if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException(); n >= '0' && n <= '9' n >= '0' n '0' n <= '9' n '9' {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} temp /= 10 temp 10 doub += (n - '0') * temp doub (n - '0') * temp (n - '0') n '0' temp n = scan() n scan() scan throw new InputMismatchException(); new InputMismatchException() return doub * neg; doub * neg doub neg public String scanString() {
			StringBuilder sb = new StringBuilder();
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			}
			return sb.toString();
		} scanString {
			StringBuilder sb = new StringBuilder();
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			}
			return sb.toString();
		} StringBuilder sb = new StringBuilder(); sb new StringBuilder() int n = scan(); n scan() scan while (isWhiteSpace(n))
				n = scan(); isWhiteSpace(n) isWhiteSpace n n = scan() n scan() scan while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			} !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n {
				sb.append((char) n);
				n = scan();
			} sb.append((char) n) sb.append sb (char) n n = scan() n scan() scan return sb.toString(); sb.toString() sb.toString sb public char scanChar() {
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			return (char) n;
		} scanChar {
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			return (char) n;
		} int n = scan(); n scan() scan while (isWhiteSpace(n))
				n = scan(); isWhiteSpace(n) isWhiteSpace n n = scan() n scan() scan return (char) n; (char) n private boolean isWhiteSpace(int n) {
			if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true;
			return false;
		} isWhiteSpace {
			if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true;
			return false;
		} if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true; n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1 n == '\t' n == '\r' n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1 n == ' ' n ' ' n == '\n' n '\n' n == '\r' n '\r' n == '\t' n '\t' n == -1 n -1 1 return true; true return false; false int n n public class Main {

	public static void main(String[] args) {
		Task task = new Task();
		task.solve();
	}

	public static class Task {
		static final long MOD = (long) 1e9 + 7;
		static char[] carr;
		static int n;

		public void solve() {
			Scan sc = new Scan();
			carr = sc.scanString().toCharArray();
			n = carr.length;
			boolean got = check(n, n);
			System.out.println(got ? "YES" : "NO");
		}

		boolean check(int i, int j) {
			if (j < 0)
				return true;
			if (i < 0)
				return false;
			int len = j - i + 1;
			boolean good = false;
			if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true;
			if (!good)
				return false;
			good = check(i - 5, i - 1);
			if (good)
				return good;
			good = check(i - 6, i - 1);
			if (good)
				return good;
			good = check(i - 7, i - 1);
			return good;
		}
	}

	public static class Scan {
		private byte[] buf = new byte[1024];
		private int index;
		private InputStream in;
		private int total;

		public Scan() {
			in = System.in;
		}

		public int scan() {
			if (total < 0)
				throw new InputMismatchException();
			if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			}
			return buf[index++];
		}

		public long scanLong() {
			long integer = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			return neg * integer;
		}

		public double scanDouble() throws IOException {
			double doub = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			}
			return doub * neg;
		}

		public String scanString() {
			StringBuilder sb = new StringBuilder();
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			}
			return sb.toString();
		}

		public char scanChar() {
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			return (char) n;
		}

		private boolean isWhiteSpace(int n) {
			if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true;
			return false;
		}
	}
} public class Main {

	public static void main(String[] args) {
		Task task = new Task();
		task.solve();
	}

	public static class Task {
		static final long MOD = (long) 1e9 + 7;
		static char[] carr;
		static int n;

		public void solve() {
			Scan sc = new Scan();
			carr = sc.scanString().toCharArray();
			n = carr.length;
			boolean got = check(n, n);
			System.out.println(got ? "YES" : "NO");
		}

		boolean check(int i, int j) {
			if (j < 0)
				return true;
			if (i < 0)
				return false;
			int len = j - i + 1;
			boolean good = false;
			if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true;
			if (!good)
				return false;
			good = check(i - 5, i - 1);
			if (good)
				return good;
			good = check(i - 6, i - 1);
			if (good)
				return good;
			good = check(i - 7, i - 1);
			return good;
		}
	}

	public static class Scan {
		private byte[] buf = new byte[1024];
		private int index;
		private InputStream in;
		private int total;

		public Scan() {
			in = System.in;
		}

		public int scan() {
			if (total < 0)
				throw new InputMismatchException();
			if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			}
			return buf[index++];
		}

		public long scanLong() {
			long integer = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			return neg * integer;
		}

		public double scanDouble() throws IOException {
			double doub = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			}
			return doub * neg;
		}

		public String scanString() {
			StringBuilder sb = new StringBuilder();
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			}
			return sb.toString();
		}

		public char scanChar() {
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			return (char) n;
		}

		private boolean isWhiteSpace(int n) {
			if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true;
			return false;
		}
	}
} Main
import java.io.IOException;
import java.io.InputStream;
import java.util.InputMismatchException;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		Task task = new Task();
		task.solve();
	}

	public static class Task {
		static final long MOD = (long) 1e9 + 7;
		static char[] carr;
		static int n;

		public void solve() {
			Scan sc = new Scan();
			carr = sc.scanString().toCharArray();
			n = carr.length;
			boolean got = check(n, n);
			System.out.println(got ? "YES" : "NO");
		}

		boolean check(int i, int j) {
			if (j < 0)
				return true;
			if (i < 0)
				return false;
			int len = j - i + 1;
			boolean good = false;
			if (i < n) {
				String s = new String(carr, i, len);
				if (!good && len == 5)
					good = s.equals("dream") || s.equals("erase");
				if (!good && len == 6)
					good = s.equals("eraser");
				if (!good && len == 7)
					good = s.equals("dreamer");
			} else
				good = true;
			if (!good)
				return false;
			good = check(i - 5, i - 1);
			if (good)
				return good;
			good = check(i - 6, i - 1);
			if (good)
				return good;
			good = check(i - 7, i - 1);
			return good;
		}
	}

	public static class Scan {
		private byte[] buf = new byte[1024];
		private int index;
		private InputStream in;
		private int total;

		public Scan() {
			in = System.in;
		}

		public int scan() {
			if (total < 0)
				throw new InputMismatchException();
			if (index >= total) {
				index = 0;
				try {
					total = in.read(buf);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (total <= 0)
					return -1;
			}
			return buf[index++];
		}

		public long scanLong() {
			long integer = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n)) {
				if (n >= '0' && n <= '9') {
					integer *= 10;
					integer += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			return neg * integer;
		}

		public double scanDouble() throws IOException {
			double doub = 0;
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			int neg = 1;
			if (n == '-') {
				neg = -1;
				n = scan();
			}
			while (!isWhiteSpace(n) && n != '.') {
				if (n >= '0' && n <= '9') {
					doub *= 10;
					doub += n - '0';
					n = scan();
				} else
					throw new InputMismatchException();
			}
			if (n == '.') {
				n = scan();
				double temp = 1;
				while (!isWhiteSpace(n)) {
					if (n >= '0' && n <= '9') {
						temp /= 10;
						doub += (n - '0') * temp;
						n = scan();
					} else
						throw new InputMismatchException();
				}
			}
			return doub * neg;
		}

		public String scanString() {
			StringBuilder sb = new StringBuilder();
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			while (!isWhiteSpace(n)) {
				sb.append((char) n);
				n = scan();
			}
			return sb.toString();
		}

		public char scanChar() {
			int n = scan();
			while (isWhiteSpace(n))
				n = scan();
			return (char) n;
		}

		private boolean isWhiteSpace(int n) {
			if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
				return true;
			return false;
		}
	}
}
