很容易想到的卡特兰数,不过复杂度高精度还是挺恶心的。

于是用JAVA秒杀了。

import java.math.BigInteger;
import java.util.Scanner;
public class Main {
     static BigInteger[] f=new BigInteger[5005];
     static BigInteger[] c=new BigInteger[10005];
     static BigInteger MOD;
     
     static void init(){
    	 f[0]=BigInteger.valueOf(1);
    	 for(int i=1;i<=5000;i++){
    		 f[i]=f[i-1].multiply(BigInteger.valueOf(4*i-2));
    		 f[i]=f[i].divide(BigInteger.valueOf(i+1));
    	 }
    	 String str="1";
    	 for(int i=0;i<100;i++)str+="0";
    	 MOD=new BigInteger(str);
     }
     public static void main(String[] args){
    	 init();
    	 Scanner cin=new Scanner(System.in);
    	 while(cin.hasNext()){
    		 int n=cin.nextInt();
    		 c[0]=BigInteger.valueOf(1);
    		 for(int i=1;i<=n;i++){
    			 c[i]=c[i-1].multiply(BigInteger.valueOf(n-i+1));
    			 c[i]=c[i].divide(BigInteger.valueOf(i));
    		 }
    		 BigInteger ans=BigInteger.valueOf(0);
    		 for(int i=0;i*2<=n;i++){
    			 BigInteger tmp=c[i*2].mod(MOD).multiply(f[i].mod(MOD));
    			 ans=ans.add(tmp);
    			 ans=ans.mod(MOD);
    		 }
    		 System.out.println(ans);
    	 }
     }
}