dp[n]表示总共有2*n层的只考虑左边路径总数
然后单边情况下,
d[n]只考虑水平方向那个3*n的奇怪东西的路径总数
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=1e6+10;
typedef __int64 LL;
const int mod=1e9+9;
LL dp[N],d[N];
void init(){
int n=1e6;
d[0]=1;
for(int i=1;i<=n;i++){
d[i]=(d[i-1]*2+3)%mod;
}
for(int i=1;i<=n;i++){
d[i]*=d[i-1];d[i]%=mod;
}
dp[2]=2;
for(int i=4;i<=n;i+=2){
dp[i]=(dp[i-2]+d[(i/2-2)]*4)%mod;
}
}
int main(){
#ifdef DouBi
freopen("in.cpp","r",stdin);
#endif // DouBi
int n;
init();
while(scanf("%d",&n)!=EOF){
LL ans=(dp[n]*dp[n]%mod*2%mod+2)%mod;
printf("%I64d\n",ans);
}
return 0;
}