0pts /ll
首先,如果 n<m-1 直接输出 0。
然后,先不管 n 是多少,让它合法。(例如:m=4 n=8)

如图所示,先把三个框拿过去让它合法。因为它内部也可以排序,所以现在的方案数是 m!(8!)。
再插最后一个框

因为这里有 8 种情况,所以再乘 8,对于这个样例的结果就是 8!×8。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,p,sum=1,ans;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>n>>m>>p;
if(n<m-1){
cout<<0;
return 0;
}
for(int i=2;i<=m;i++){
sum*=i;
sum%=p;
}
ans=sum;
if(n>=2*m+1){
sum=1;
for(int i=2*m+1;i<=n;i++){
sum*=i;
sum%=p;
}
ans*=sum;
ans%=p;
}
cout<<ans;
return 0;
}