
import java.util.*;

public class Main {
  public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);
    // 前からだと分解できるかわからないので、後ろから分解してみる
    String[] divideArr = {"maerd", "remaerd", "esare", "resare"};
    StringBuilder reverseStr = new StringBuilder(sc.next()).reverse();
    int length = reverseStr.length();

    for (int i = 0; i < length;) {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    }

    System.out.println("YES");
  }
} import java.util.*; util.* java public class Main {
  public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);
    // 前からだと分解できるかわからないので、後ろから分解してみる
    String[] divideArr = {"maerd", "remaerd", "esare", "resare"};
    StringBuilder reverseStr = new StringBuilder(sc.next()).reverse();
    int length = reverseStr.length();

    for (int i = 0; i < length;) {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    }

    System.out.println("YES");
  }
} Main public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);
    // 前からだと分解できるかわからないので、後ろから分解してみる
    String[] divideArr = {"maerd", "remaerd", "esare", "resare"};
    StringBuilder reverseStr = new StringBuilder(sc.next()).reverse();
    int length = reverseStr.length();

    for (int i = 0; i < length;) {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    }

    System.out.println("YES");
  } main {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);
    // 前からだと分解できるかわからないので、後ろから分解してみる
    String[] divideArr = {"maerd", "remaerd", "esare", "resare"};
    StringBuilder reverseStr = new StringBuilder(sc.next()).reverse();
    int length = reverseStr.length();

    for (int i = 0; i < length;) {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    }

    System.out.println("YES");
  } @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String[] divideArr = {"maerd", "remaerd", "esare", "resare"}; divideArr {"maerd", "remaerd", "esare", "resare"} "maerd" "remaerd" "esare" "resare" StringBuilder reverseStr = new StringBuilder(sc.next()).reverse(); reverseStr new StringBuilder(sc.next()).reverse() new StringBuilder(sc.next()).reverse new StringBuilder(sc.next()) int length = reverseStr.length(); length reverseStr.length() reverseStr.length reverseStr for (int i = 0; i < length;) {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    } int i = 0; int i = 0; i 0 i < length i length {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    } {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    } boolean isDivided = false; isDivided false for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      } String s divideArr {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      } {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      } if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        } reverseStr.indexOf(s) == 0 reverseStr.indexOf(s) reverseStr.indexOf reverseStr s 0 {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        } i += s.length() i s.length() s.length s reverseStr.delete(0, s.length()) reverseStr.delete reverseStr 0 s.length() s.length s isDivided = true isDivided true break; if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      } !isDivided isDivided {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      } System.out.println("NO") System.out.println System.out System System.out "NO" return; System.out.println("YES") System.out.println System.out System System.out "YES" String[] args args public class Main {
  public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);
    // 前からだと分解できるかわからないので、後ろから分解してみる
    String[] divideArr = {"maerd", "remaerd", "esare", "resare"};
    StringBuilder reverseStr = new StringBuilder(sc.next()).reverse();
    int length = reverseStr.length();

    for (int i = 0; i < length;) {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    }

    System.out.println("YES");
  }
} public class Main {
  public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);
    // 前からだと分解できるかわからないので、後ろから分解してみる
    String[] divideArr = {"maerd", "remaerd", "esare", "resare"};
    StringBuilder reverseStr = new StringBuilder(sc.next()).reverse();
    int length = reverseStr.length();

    for (int i = 0; i < length;) {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    }

    System.out.println("YES");
  }
} Main

import java.util.*;

public class Main {
  public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);
    // 前からだと分解できるかわからないので、後ろから分解してみる
    String[] divideArr = {"maerd", "remaerd", "esare", "resare"};
    StringBuilder reverseStr = new StringBuilder(sc.next()).reverse();
    int length = reverseStr.length();

    for (int i = 0; i < length;) {
      boolean isDivided = false;
      for (String s : divideArr) {
        // ぶんかいできたら、分解した次の文字から繰り返す
        if (reverseStr.indexOf(s) == 0) {
          i += s.length();
          reverseStr.delete(0, s.length());
          isDivided = true;
          break;
        }
      }
      if (!isDivided) {
        System.out.println("NO"); // 分解できなかったらおわり
        return;
      }
    }

    System.out.println("YES");
  }
}
