#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define mst(a,b) memset((a),(b),sizeof(a))
#define rush() int TT;scanf("%d",&TT);for(int TTT=1;TTT<=TT;TTT++)
#define fastio() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define forrr(i,x,y) for(int i=x;i<=y;++i)
#define rofff(i,x,y) for(int i=x;i>=y;--i)
#define forr(i,x,y) for(int i=x;i<y;++i)
#define roff(i,x,y) for(int i=x;i>y;--i)
#define lowbit(x) (x&-x)
#define fin freopen("in.txt","r",stdin)
#define fout freopen("out.txt","w",stdout)
#define fi first
#define se second
#define mp make_pair
#define pb emplace_back
#define sf scanf
#define pf printf
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;
typedef pair<string,int> psi;
const ldb pi = acos((ldb)-1);
int in(int &a,int &b,int &c,int &d) {
    return scanf("%d%d%d%d",&a,&b,&c,&d);
}
int in(int &a,int &b,int &c) {
    return scanf("%d%d%d",&a,&b,&c);
}
int in(int &a,int &b) {
    return scanf("%d%d",&a,&b);
}
int in(ll &a,ll &b) {
    return scanf("%lld%lld",&a,&b);
}
int in(ll &a,ll &b,ll &c,ll &d) {
    return scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
}
int in(ll &a,ll &b,ll &c) {
    return scanf("%lld%lld%lld",&a,&b,&c);
}
int in(ll &a) {
    return scanf("%lld",&a);
}
int in(int &a) {
    return scanf("%d",&a);
}
int in(char *s) {
    return scanf("%s",s);
}
int in(char &c) {
    return scanf("%c",&c);
}
void out(int a,bool ln) {
    printf("%d%c",a," \n"[ln]);
}
void out(ll a,bool ln) {
    printf("%lld%c",a," \n"[ln]);
}
void out(db a,int digit,bool ln) {
    printf("%.*f%c",digit,a," \n"[ln]);
}
ll gcd(ll a, ll b) {
    return b?gcd(b,a%b):a;
}
ll lcm(ll a, ll b) {
    return a/gcd(a,b)*b;
}
const int inf = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 3e5+5;
const int maxm = 1e6+5;
const ll mod = 1e9+7;
ll dp[55][2500],pre[55][2500],ans[55],n,m;

int main() {
    in(n,m);
    dp[0][0]=1;
    forrr(i,0,n*(n-1)/2) {
        pre[0][i]=1;
    }
    forrr(i,1,n) {
        dp[i][0]=pre[i][0]=1;
        forrr(j,1,n*(n-1)/2) {
            if(j-i>=0)
                dp[i][j]=(pre[i-1][j]-pre[i-1][j-i]+m)%m;
            else
                dp[i][j]=pre[i-1][j];
            pre[i][j]=(pre[i][j-1]+dp[i][j])%m;
        }
    }
    forrr(i,1,n) {
        forrr(j,1,i) {
            forr(k,1,j) {
                forrr(l,0,(i-1)*(i-2)/2) {
                    if(l+k-j-1>=0)
                        ans[i]=(ans[i]+dp[i-1][l]*pre[i-1][l+k-j-1]%m)%m;
                }
            }
        }
        ans[i] = (1LL*i*ans[i-1]%m+ans[i])%m;
    }
    out(ans[n],1);
}
