import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] keyStrArr = new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        };

        String sReverse = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < keyStrArr.length; i++) {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        }

        boolean isEqual = true;
        for (int i = 0; i < sReverse.length();) {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        }

        System.out.println(isEqual ? "YES" : "NO");
    }
} import java.util.*; util.* java public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] keyStrArr = new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        };

        String sReverse = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < keyStrArr.length; i++) {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        }

        boolean isEqual = true;
        for (int i = 0; i < sReverse.length();) {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        }

        System.out.println(isEqual ? "YES" : "NO");
    }
} Main public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] keyStrArr = new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        };

        String sReverse = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < keyStrArr.length; i++) {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        }

        boolean isEqual = true;
        for (int i = 0; i < sReverse.length();) {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        }

        System.out.println(isEqual ? "YES" : "NO");
    } main {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] keyStrArr = new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        };

        String sReverse = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < keyStrArr.length; i++) {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        }

        boolean isEqual = true;
        for (int i = 0; i < sReverse.length();) {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        }

        System.out.println(isEqual ? "YES" : "NO");
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String s = sc.next(); s sc.next() sc.next sc String[] keyStrArr = new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        }; keyStrArr new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        } String sReverse = new StringBuilder(s).reverse().toString(); sReverse new StringBuilder(s).reverse().toString() new StringBuilder(s).reverse().toString new StringBuilder(s).reverse() new StringBuilder(s).reverse new StringBuilder(s) for (int i = 0; i < keyStrArr.length; i++) {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        } int i = 0; int i = 0; i 0 i < keyStrArr.length i keyStrArr.length keyStrArr keyStrArr.length i++ i++ i {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        } {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        } keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString() keyStrArr[i] keyStrArr i new StringBuilder(keyStrArr[i]).reverse().toString() new StringBuilder(keyStrArr[i]).reverse().toString new StringBuilder(keyStrArr[i]).reverse() new StringBuilder(keyStrArr[i]).reverse new StringBuilder(keyStrArr[i]) boolean isEqual = true; isEqual true for (int i = 0; i < sReverse.length();) {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        } int i = 0; int i = 0; i 0 i < sReverse.length() i sReverse.length() sReverse.length sReverse {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        } {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        } boolean flg = false; flg false for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            } int j = 0; int j = 0; j 0 j < keyStrArr.length j keyStrArr.length keyStrArr keyStrArr.length j++ j++ j {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            } {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            } String partStr = ""; partStr "" if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                } i + keyStrArr[j].length() > sReverse.length() i + keyStrArr[j].length() i keyStrArr[j].length() keyStrArr[j].length keyStrArr[j] keyStrArr j sReverse.length() sReverse.length sReverse {
                    partStr = sReverse.substring(i);
                } partStr = sReverse.substring(i) partStr sReverse.substring(i) sReverse.substring sReverse i {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                } partStr = sReverse.substring(i, i + keyStrArr[j].length()) partStr sReverse.substring(i, i + keyStrArr[j].length()) sReverse.substring sReverse i i + keyStrArr[j].length() i keyStrArr[j].length() keyStrArr[j].length keyStrArr[j] keyStrArr j if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                } partStr.equals(keyStrArr[j]) partStr.equals partStr keyStrArr[j] keyStrArr j {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                } i += keyStrArr[j].length() i keyStrArr[j].length() keyStrArr[j].length keyStrArr[j] keyStrArr j flg = true flg true break; if (!flg) {
                isEqual = false;
                break;
            } !flg flg {
                isEqual = false;
                break;
            } isEqual = false isEqual false break; System.out.println(isEqual ? "YES" : "NO") System.out.println System.out System System.out isEqual ? "YES" : "NO" isEqual "YES" "NO" String[] args args public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] keyStrArr = new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        };

        String sReverse = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < keyStrArr.length; i++) {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        }

        boolean isEqual = true;
        for (int i = 0; i < sReverse.length();) {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        }

        System.out.println(isEqual ? "YES" : "NO");
    }
} public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] keyStrArr = new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        };

        String sReverse = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < keyStrArr.length; i++) {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        }

        boolean isEqual = true;
        for (int i = 0; i < sReverse.length();) {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        }

        System.out.println(isEqual ? "YES" : "NO");
    }
} Main
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] keyStrArr = new String[]{
                "dream",
                "dreamer",
                "erase",
                "eraser",
        };

        String sReverse = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < keyStrArr.length; i++) {
            keyStrArr[i] = new StringBuilder(keyStrArr[i]).reverse().toString();
        }

        boolean isEqual = true;
        for (int i = 0; i < sReverse.length();) {
            boolean flg = false;// 文字列が部分一致するか
            for (int j = 0; j < keyStrArr.length; j++) {
                String partStr = "";
                if (i + keyStrArr[j].length() > sReverse.length()) {
                    partStr = sReverse.substring(i);
                } else {
                    partStr = sReverse.substring(i, i + keyStrArr[j].length());// iからの部分文字列
                }

                if (partStr.equals(keyStrArr[j])) {
                    // 部分一致したためroopを抜ける
                    i += keyStrArr[j].length();
                    flg = true;
                    break;
                }
            }

            // 文字列が一致しなかったためroopを抜ける
            if (!flg) {
                isEqual = false;
                break;
            }
        }

        System.out.println(isEqual ? "YES" : "NO");
    }
}
