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
#include <bits/stdc++.h>

int n, m, mod;
int wynik;
int dp[5003][5003][2];

int main()
{
    scanf("%d%d%d", &n, &m, &mod);
    for(int i=1; i<=m; i++)
        for(int j=i; j<=m; j++)
            dp[i][j][1]=1;
    for(int k=2; k<=n; k++)
    {
        for(int i=1; i<=m; i++)
            for(int j=i; j<=m; j++)
                dp[i][j][k&1]=0;
        
        for(int i=1; i<=m; i++)
            for(int j=i; j<=m; j++)
                for(int p=1; p<=m; p++)
                    for(int q=p; q<=m; q++)
                    {
                        if(j<p || q<i)
                            continue;
                        dp[p][q][k&1]=(dp[p][q][k&1]+dp[i][j][(k-1)&1])%mod;
                    }
    }
    for(int i=1; i<=m; i++)
        for(int j=i; j<=m; j++)
            wynik=(wynik+dp[i][j][n&1])%mod;
    printf("%d\n", wynik);
}