#include <iostream>
#include <cstring>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);++i)
string s;
int memo[500][501];
bool cat(int l,int r){
	if(memo[l][r]!=0) return memo[l][r]>0;
	int sz=r-l;
	if(sz==0) return true;
	string t=s.substr(l,sz);
	if(t[0]!='m' || t[sz-1]!='w'){
		memo[l][r]=-1;
		return false;
	}
	bool ok=false;
	rep(i,sz){
		if(t[i]!='e') continue;
		if(cat(l+1,l+i) && cat(l+i+1,r-1)) ok=true;
	}
	memo[l][r]=(ok ? 1 : -1);
	return ok;
}
int main(){
	cin >> s;
	cout << (cat(0,s.size()) ? "Cat\n" : "Rabbit\n");
	return 0;
}
### Prompt

Your challenge is to write a CPP solution to the following problem:

Example

Input

mmemewwemeww


Output

Cat

### Response

```cpp
#include <iostream>
#include <cstring>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);++i)
string s;
int memo[500][501];
bool cat(int l,int r){
	if(memo[l][r]!=0) return memo[l][r]>0;
	int sz=r-l;
	if(sz==0) return true;
	string t=s.substr(l,sz);
	if(t[0]!='m' || t[sz-1]!='w'){
		memo[l][r]=-1;
		return false;
	}
	bool ok=false;
	rep(i,sz){
		if(t[i]!='e') continue;
		if(cat(l+1,l+i) && cat(l+i+1,r-1)) ok=true;
	}
	memo[l][r]=(ok ? 1 : -1);
	return ok;
}
int main(){
	cin >> s;
	cout << (cat(0,s.size()) ? "Cat\n" : "Rabbit\n");
	return 0;
}
```