#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... |