1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4
5 using namespace std;
6
7 void gcd(int a,int b,int &d,int &x,int &y)
8 {
9 if(!b)
10 {
11 d=a;
12 x=1;
13 y=0;
14 }
15 else
16 {
17 gcd(b,a%b,d,y,x);
18 y-=x*(a/b);
19 }
20 }
21
22 //计算模n下a的逆元,如果不存在逆元,返回-1
23 int inv(int a,int n)
24 {
25 int d,x,y;
26 gcd(a,n,d,x,y);
27 return d==1? (x+n)%n: -1;
28 }
29
30 long long arr[10010];
31 long long mod=1000000007;
32
33 int main()
34 {
35 int n;
36 memset(arr,0,sizeof(arr));
37 arr[0]=1;
38 for(int i=1;i<=10000;i++)
39 {
40 arr[i]=((arr[i-1]*2*(2*i+1)%mod)*inv(i+2,mod))%mod;
41 }
42 while(scanf("%d",&n)!=EOF)
43 {
44 printf("%lld\n",arr[n-1]);
45 }
46 return 0;
47 }