#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define FOR(i,a,b) for(int i = (a) , _b = (b); i <= _b; ++i)
#define MASK(x) ((LL)(1)<<(x))
#define BIT(mask , x) (((mask)>>(x))&(1))
template<class X , class Y>
bool maximize(X &x , Y y){
if (x<y) return x=y,true; else return false;
}
template<class X,class Y>
bool minimize(X &x, Y y){
if (x>y) return x=y,true; else return false;
}
template<class T>
void compress(vector<T>&data){
sort(data.begin() , data.end()) ;
data.resize(unique(data.begin() , data.end()) - data.begin());
return;
}
mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
int Rand(int l,int r){
return uniform_int_distribution<int>(l,r)(rng);
}
const int N = (int)2000;
const int MOD = (int)1e9+7;
int add(int a,int b){
return a + b >= MOD ?a + b - MOD : a + b;
}
int start , finish , n;
namespace subtask1{
int type(int prev,int cur){
if (prev < cur) return 1;
return 0;
}
const int MAXN = 8;
int dp[MASK(MAXN)][MAXN][MAXN];
void main_code(void){
--start , --finish;
FOR(i,0,n-1) if (i!=start) dp[MASK(i)|MASK(start)][start][i] = 1;
FOR(mask,0,MASK(n)-1) FOR(i,0,n){
if (BIT(mask,i)) {
FOR(j,0,n) if (i!=j){
FOR(nxt , 0 , n) if (!BIT(mask,nxt)){
if (type(nxt , i) == type(j , i)) dp[mask|MASK(nxt)][i][nxt] = add(dp[mask|MASK(nxt)][i][nxt] , dp[mask][j][i]);
}
}
}
}
int ans = 0;
FOR(i,0,n-1) if (i != finish) ans = add(ans , dp[MASK(n)-1][i][finish]);
cout<<ans;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0) ; cout.tie(0);
#define name "main"
if (fopen(name".inp","r")){
freopen(name".inp","r",stdin);
freopen(name".out","w",stdout);
}
cin >> n >> start >> finish;
if (n <= 8) return subtask1::main_code() , 0;
}
Compilation message (stderr)
kangaroo.cpp: In function 'int main()':
kangaroo.cpp:67:32: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
67 | freopen(name".inp","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
kangaroo.cpp:68:32: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
68 | freopen(name".out","w",stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# | 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... |