Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Problem A:
CatChecker

外見からねこかどうかわからない動物がいる. あなたは, 鳴き声がねこの鳴き声であればねこであり, そうでなければうさぎであると判定することにした.

ねこの鳴き声は次のように定義される.

"" (empty string) はねこの鳴き声である.

$X$, $Y$ がねこの鳴き声であれば 'm' + $X$ + 'e' + $Y$ + 'w' は猫の鳴き声である. ただし + は文字列の連結を表す.

以上で定義されるものだけがねこの鳴き声である.

BNF で表すとねこの鳴き声 $CAT$ は

$CAT$ := "" (empty string) $|$ 'm' + $CAT$ + 'e' + $CAT$ + 'w'

と定義される.

鳴き声を表す文字列 $S$ が与えられる. 鳴き声から動物が何であるか判定せよ.

Constraints

$S$ will contain between 1 and 500 characters, inclusive. Each character in $S$ will be 'm', 'e' or 'w'.

Input

入力は以下の形式で与えられる:

$S$

Output

$S$ が猫の鳴き声であれば "Cat", そうでなければ "Rabbit" と1 行に出力せよ.

Sample Input 1

mmemewwemeww

Sample Output 1

Cat

Sample Input 2

mewmew

Sample Output 2

Rabbit

Solution in JAVA (judge verdict: Accepted)

import java.util.Scanner;

public class Main {

	static Scanner sc = new Scanner(System.in);
	static int N;
	static String str;
	static int[][] memo;

	public static void main(String[] a) {
		str = sc.next();
		N = str.length();
		memo = new int[N + 1][N + 1];
		System.out.println(rec(0, N) ? "Cat" : "Rabbit");
	}

	static boolean rec(int s, int e) {
		if (s == e) return true;
		if (memo[s][e] != 0) return memo[s][e] == 1 ? true : false;
		if (str.charAt(s) != 'm') return false;
		if (str.charAt(e - 1) != 'w') return false;
		boolean ret = false;
		for (int i = s + 1; i < e - 1; ++i) {
			if (str.charAt(i) != 'e') continue;
			if (rec(s + 1, i) && rec(i + 1, e - 1)) {
				ret = true;
				break;
			}
		}
		memo[s][e] = ret ? 1 : -1;
		return ret;
	}

}