1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
int p;
int main()
{
	scanf("%d%d%d",&m,&n,&p);
	int dp[2][n][n];
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<n;++j)
		{
			if(i<=j)	dp[0][i][j]=1;
			else		dp[0][i][j]=0;
			dp[1][i][j]=0;
		}
	}
	for(int q=1;q<m;++q)
	{
		for(int i=0;i<n;++i)
		{
			for(int j=i;j<n;++j)
			{
				dp[q&1][i][j]=0;
				for(int k=0;k<=j;++k)
				{
					for(int l=max(k,i);l<n;++l)
					{
						dp[q&1][i][j]+=dp[(q&1)^1][k][l];
						if(dp[q&1][i][j]>=p)	dp[q&1][i][j]-=p;
					}
				}
			}
		}
//		printf("----\n");
//		for(int i=0;i<n;++i)
//		{
//			for(int j=0;j<n;++j)
//			{
//				printf("%d ",dp[q&1][i][j]);
//			}
//			printf("\n");
//		}
//		printf("----\n");
	}
	int w=0;
	for(int i=0;i<n;++i)
	{
		for(int j=i;j<n;++j)
		{
			w+=dp[(m&1)^1][i][j];
			if(w>=p)	w-=p;
		}
	}
	printf("%d\n",w);

}