#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	string str;

	cin >> str;

	bool enabled = false;

	while (true) {
		long long length = str.length();

		if (length == 0) {
			enabled = true;
			break;
		}

		if (length >= 7 && str.rfind("dreamer") == length - 7) {
			str.erase(str.end() - 7, str.end());
		}
		else if (length >= 6 && str.rfind("eraser") == length - 6) {
			str.erase(str.end() - 6, str.end());
		}
		else if (length >= 5 && str.rfind("dream") == length - 5) {
			str.erase(str.end() - 5, str.end());
		}
		else if (length >= 5 && str.rfind("erase") == length - 5) {
			str.erase(str.end() - 5, str.end());
		}
		else{
			break;
		}
	}

	if (enabled){
		cout << "YES" << endl;
 	}
	else {
		cout << "NO" << endl;
	}
}

//int main()
//{
//	unsigned long long n, y;
//
//	cin >> n >> y;
//
//	y /= 1000;
//	
//	unsigned long long a = 0, b = 0;
//	bool valid = false;
//	for (a = 0; a <= n; a++)
//	{
//		for (b = 0; b <= n - a; b++)
//		{
//			long long sum = a * 10 + b * 5 + (n - a - b);
//			if (sum == y)
//			{
//				valid = true;
//				break;
//			}
//		}
//
//		if (valid)
//		{
//			break;
//		}
//	}
//
//	if (valid)
//	{
//		cout << a << " " <<  b << " " << n - a - b << endl;
//	}
//	else
//	{
//		cout << "-1 -1 -1" << endl;
//	}
//}

//int main()
//{
//	unsigned long long n;
//	vector<long long> list;
//
//	cin >> n;
//	for (unsigned long iN = 1; iN <= n; iN++)
//	{
//		long long num;
//		cin >> num;
//		list.push_back(num);
//	}
//
//	std::sort(list.begin(), list.end(), std::greater<int>());
//
//	long long level = 0;
//	long long prev = 0;
//	for (int i = 0; i < n; i++)
//	{
//		if (list[i] != prev)
//		{
//			prev = list[i];
//			level++;
//		}
//	}
//
//	cout << level << endl;
//}

//int main()
//{
//	unsigned long long n;
//	vector<long long> list;
//
//	cin >> n;
//	for (unsigned long iN = 1; iN <= n; iN++)
//	{
//		long long num;
//		cin >> num;
//		list.push_back(num);
//	}
//
//	std::sort(list.begin(), list.end(), std::greater<int>());
//
//	long long result = 0;
//	for (int i = 0; i < n; i++)
//	{
//		if (i % 2 == 0)
//		{
//			result += list[i];
//		}
//		else
//		{
//			result -= list[i];
//		}
//	}
//
//	cout << result << endl;
//}

//int main()
//{
//	unsigned long n, a, b;
//
//	cin >> n >> a >> b;
//
//	unsigned long sum = 0;
//	for (unsigned long iN = 1; iN <= n; iN++)
//	{
//		unsigned long last = iN;
//
//		unsigned long rank10000 = last / 10000;
//		last -= rank10000 * 10000;
//
//		unsigned long rank1000 = last / 1000;
//		last -= rank1000 * 1000;
//
//		unsigned long rank100 = last / 100;
//		last -= rank100 * 100;
//
//		unsigned long rank10 = last / 10;
//		last -= rank10 * 10;
//
//		unsigned long rank1 = last;
//
//		unsigned long temp_sum = rank10000 + rank1000 + rank100 + rank10 + rank1;
//		if (temp_sum >= a && temp_sum <= b)
//		{
//			sum += iN;
//		}
//	}
//
//	cout << sum << endl;
//}

//int main()
//{
//	int coin500, coin100, coin50;
//	int x;
//
//	cin >> coin500 >> coin100 >> coin50 >> x;
//
//	int count_pattern = 0;
//	for (int i500 = 0; i500 <= coin500; i500++)
//	{
//		for (int i100 = 0; i100 <= coin100; i100++)
//		{
//			for (int i50 = 0; i50 <= coin50; i50++)
//			{
//				if (i500 * 500 + i100 * 100 + i50 * 50 == x)
//				{
//					count_pattern++;
//				}
//			}
//		}
//	}
//
//	cout << count_pattern << endl;
//}

//int main()
//{
//	int n;
//	vector<int> list;
//
//	cin >> n;
//
//	for (int i = 0; i < n; i++)
//	{
//		int num;
//		cin >> num;
//		list.push_back(num);
//	}
//
//	int proc_count = 0;
//	while (true)
//	{
//		bool valid = true;
//		for (int i = 0; i < n; i++)
//		{
//			if (list[i] % 2 > 0)
//			{
//				valid = false;
//				break;
//			}
//			else
//			{
//				list[i] /= 2;
//			}
//		}
//
//		if (valid == true)
//		{
//			proc_count++;
//		}
//		else
//		{
//			break;
//		}
//	}
//
//	cout << proc_count << endl;
//}

//int main()
//{
//	string str;
//
//	cin >> str;
//
//	int count_one = 0;
//
//	if (str[0] == '1')
//	{
//		count_one++;
//	}
//	
//	if (str[1] == '1')
//	{
//		count_one++;
//	}
//
//	if (str[2] == '1')
//	{
//		count_one++;
//	}
//
//	cout << count_one << endl;
//}


//int main()
//{
//	int a, b;
//
//	cin >> a >> b;
//
//	int c = a * b;
//
//	if (c % 2 == 0)
//	{
//		cout << "Even" << endl;
//	}
//	else
//	{
//		cout << "Odd" << endl;
//	}
//}

Measured memory_bytes: 512