#include <bits/stdc++.h>
using namespace std;
int n;
long long ans=0;
long long p;
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> p;
vector<int> arr;
for(int i=1; i<=n; i++){
arr.push_back(0);
}
for(int i=1; i<=n; i++){
arr.push_back(1);
}
int ans=0;
do{
int grr=0;
bool ok=true;
for(int i=0; i<2*n; i++){
if(arr[i]==0) grr++;
else grr--;
if(grr<0) ok=false;
}
if(!ok) continue;
int brr[2*n];
vector<int> perm;
for(int i=0; i<n; i++) perm.push_back(i);
do{
vector<pair<int,int> > ran;
int prev[n+1];
memset(prev,-1,sizeof(prev));
int good=0,cur=-1;
int cnt=0,cnt2=0;
bool ok2=true;
for(int i=0; i<2*n; i++){
if(arr[i]==0){
brr[i]=cnt;
cnt++;
}
else{
if(perm[cnt2]>=cnt){
ok2=false;
break;
}
brr[i]=perm[cnt2];
cnt2++;
}
if(prev[brr[i]]!=-1){
ran.push_back({prev[brr[i]],i});
if(cur<prev[brr[i]]){
good++;
cur=i;
}
}
else{
prev[brr[i]]=i;
}
}
if(!ok2) continue;
sort(ran.begin(),ran.end());
int bad=0;
cur=-1;
for(auto i:ran) if(i.first>cur) bad++,cur=i.second;
if(good>bad) ans++;
} while(next_permutation(perm.begin(),perm.end()));
} while(next_permutation(arr.begin(),arr.end()));
cout << ans%p;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |