https://vj.xtuacm.cf/contest/view.action?cid=57#problem/J
逆元是模板
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#define ll long long
using namespace std;
const int maxn=1000000;
const int mod=1000000007;
ll ktl[maxn+5];
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0){x=1,y=0;return a;}
else{ll q=exgcd(b,a%b,y,x);y=y-x*(a/b);return q;}
}
ll niyuan(ll a,ll n)
{
ll x,y;
ll d=exgcd(a,n,x,y);
if(d==1)
return (x%n+n)%n;
else
return -1;
}
void init()
{
ktl[1]=1;ktl[2]=2;
for(int i=3;i<=maxn;i++)
ktl[i]=((ktl[i-1]*(4*i-2))%mod)*niyuan(i+1,mod)%mod;
}
int main()
{
init();
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
int s;
scanf("%d",&s);
printf("Case #%d:\n",i);
printf("%I64d\n",ktl[s]);
}
return 0;
}