#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
int inf = 1e18;
const int mod = 1e9 + 7;
//struct bitt {
//vector<int> t;
//int n;
//bitt (int N) : n(N+1) {
//t.resize(n+2);
//};
//void upd(int i, int va) { i ++ ;
//for(; i < n; i += (i & -i)) t[i] += va;
//};
//int get(int i) { i ++ ;
//int res = 0;
//for(; i > 0; i -= (i & -i)) res += t[i];
//return res;
//};
//int get(int l, int r) { r--;
//return get(r ) - get( -- l );
//};
//};
void solve(){
int n, m;
cin >> n >> m;
vector<int> a(n*2);
iota(a.begin(), a.end(), 0);
for(int&i:a)if(i>=n)i-=n;
sort(a.begin(),a.end());
int ans = 0;
do{
bool ok = 1;
vector<int> v(n, -1);
for(int i = 0; i < n*2; i ++ ) {
if(v[a[i]] == -1)v[a[i]] = i;
else if((i - v[a[i]])%m == 0)ok = 0;
}
ans += ok;
}while(next_permutation(a.begin(), a.end()));
cout << ans %mod << '\n';
};
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
int tt = 1;
//cin >> tt;
while(tt -- ){
solve();
};
};
# | 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... |