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

Problem J:
SolveMe

$N$ 個の部屋があり, それぞれの部屋の床にはうさぎの絵が描かれている. あなたが部屋 $r$ のうさぎの絵の右耳の部分に乗ると, あなたは部屋 $A[r]$ に書かれたうさぎのしっぽの上にテレポートする. 同様に, 部屋 $r$ のうさぎの絵の左耳の部分に乗ると, 部屋 $B[r]$ に書かれたうさぎのしっぽの上にテレポートする.

整数 $X$, $Y$, $Z$ が与えられる. ねこは, 以下の条件を満たすようにテレポートを設定しようとしている. テレポートの $N^{2N}$ 通りの設定方法のうち, 条件を満たすものは何通りか, mod 1,000,000,007で求めよ.

条件: 任意の部屋 $r$ に対し, $r$ から右耳にちょうど $X$ 回乗り, 左耳にちょうど 1 回乗り, 右耳にちょうど $Y$ 回乗り, 左耳にちょうど 1 回乗り, 右耳にちょうど $Z$ 回乗ると, $r$ に戻る.

Constraints

$N$ will be between 1 and 1,000, inclusive.

$X$, $Y$, $Z$ will be between 0 and 1,000,000,000,000,000,000, inclusive.

Input

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

$N$ $X$ $Y$ $Z$

Output

テレポートの設定方法を 1,000,000,007 で割ったあまりを表す整数を 1 行に出力せよ.

Sample Input 1

3 1 0 1

Sample Output 1

18

Sample Input 2

5 8 5 8

Sample Output 2

120

Solution in C# (judge verdict: Wrong Answer)

using System;
using System.Text.RegularExpressions;

namespace AOJ2378
{
    class Program
    {
        static void Main()
        {
            var regex = new Regex(@"mc?ec?w");

            var text = Console.ReadLine() ?? "c";

            string old = null;
            while (old != text)
            {
                old = text;
                text = regex.Replace(text, "c");
            }

            Console.WriteLine(text == "c" ? "Cat" : "Rabbit");
        }
    }
}