Problem:
Score : 600 points

Problem Statement

Let us define the oddness of a permutation p = {p_1,\ p_2,\ ...,\ p_n} of {1,\ 2,\ ...,\ n} as \sum_{i = 1}^n |i - p_i|.

Find the number of permutations of {1,\ 2,\ ...,\ n} of oddness k, modulo 10^9+7.

Constraints

All values in input are integers.

1 \leq n \leq 50

0 \leq k \leq n^2

Input

Input is given from Standard Input in the following format:

n k

Output

Print the number of permutations of {1,\ 2,\ ...,\ n} of oddness k, modulo 10^9+7.

Sample Input 1

3 2

Sample Output 1

2

There are six permutations of {1,\ 2,\ 3}. Among them, two have oddness of 2: {2,\ 1,\ 3} and {1,\ 3,\ 2}.

Sample Input 2

39 14

Sample Output 2

74764168

Solution in C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        var input = Console.ReadLine().Split().Select(long.Parse).ToList();
        var N = input[0];
        var K = input[1];
        long[,,] dp = new long[55, 55, 1300];
        dp[0, 0, 0] = 1;
        for (long i = 0; i < N; ++i)
        {
            for (long j = 0; j < i + 1; ++j)
            {
                for (long k = 0; k < K / 2 + 1; ++k)
                {
                    {
                        long nj = j;
                        dp[i + 1, nj, k + nj] += dp[i, j, k];
                    }
                    {
                        long nj = j + 1;
                        dp[i + 1, nj, k + nj] += dp[i, j, k];
                    }
                    {
                        long nj = j;
                        long x = j * 2;
                        dp[i + 1, nj, k + nj] += dp[i, j, k] * x;
                    }
                    if (j >= 1)
                    {
                        long nj = j - 1;
                        long x = j * j;
                        dp[i + 1, nj, k + nj] += dp[i, j, k] * x;
                    }
                }
            }
        }
        long ans = dp[N, 0, K / 2];
        if (ans % 2 == 1) ans = 0;
            Console.WriteLine(ans % 1000000007);
    }
}