卡特兰数列+Lucas定理
假如机器人在线的上方走,无论在什么时刻,机器人向下走的次数一定小于等于向右走的次数
在线的下方走同理
所以总方案数为Cn−12∗n−2−Cn−22∗n−2
但要对10007取模
Lucas定理:Cmn mod P=Cm mod Pn mod P∗Cmpnp mod P
#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
#define p 10007
inline poww(ll a,ll b){
ll ans=1;
a%=p;
while (b){
if (b&1) ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans;
}
inline ll C(ll n,ll m){
if (m>n) return 0;
ll ans=1;
for (int i=1;i<=m;++i){
ll a=(n+i-m)%p;
ll b=i%p;
ans=ans*(a*poww(b,p-2)%p)%p;
}
return ans;
}
inline ll Lucas(ll n, ll m){
if(m==0) return 1;
return C(n%p,m%p)*Lucas(n/p,m/p)%p;
}
int main(){
int n;
scanf("%d",&n);
n--;
ll ans1=Lucas(n+n,n);
ll ans2=Lucas(n+n,n-1);
ans1=((ans1-ans2+p)%p+ans1-ans2+p)%p;
printf("%lld\n",ans1);
return 0;
}