/*
#include<stdio.h>
char stack[100]={0};
int top=0;
void put(char k)
{
stack[top++]=k;
for(int i=0;i<top-1;i++)
{
if(stack[i]>90)
{
stack[i+1]+=(stack[i]-65)/26;
stack[i]=(stack[i]-65)%26;
}
}
}
void vivew()
{
for(int i=top-1;i>=0;i--)
{
printf("%c",stack[i]);
}
}
int main()
{
int n;
char k;
scanf("%d",&n);
for(;;)
{
if(n>=26)
{
k=n-=26;
put(k+64);
}
else
{
put(n+64);
break;
}
}
vivew();
}
*/
/*
#include<stdio.h>
char stack[100];
int top=0;
void put(int n)
{
stack[top++]=n;
}
void vivew()
{
for(int i=top-1;i>=0;i--)
{
printf("%c",stack[i]);
}
}
int main()
{
int n;
scanf("%d",&n);
for(;;)
{
if(n<=26)
{
put(n+64);
break;
}
else
{
put(n%26+64);
n/=26;
}
}
vivew();
}
*/
/*
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%3!=0)
{
printf("0");
}
else
{
printf("%d",(2(n/3))%100000007);
}
}
*/
/*
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
}
*/
/*
#include<stdio.h>
char stack[100];
int top=0;
void push(int n)
{
if(n<=0)
{
return ;
}
stack[top++]=((n-1)%26+65);
push((n-1)/26);
}
void vivew()
{
for(int i=top-1 ;i>=0;i--)
{
printf("%c",stack[i]);
}
}
int main()
{
int n;
scanf("%d",&n);
push(n);
vivew();
}
*/
/*
#include<stdio.h>
int map[9][9]={};
int main()
{
int i,j,x,y;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
scanf("%d",&map[i][j]);
}
}
scanf("%d %d",&x,&y);
for
}
*/
#include<stdio.h>
int k;
int memo[10001]={};
int put(int n)
{
if(memo[n]!=0)
{
return memo[n];
}
if(n==3)
{
return 1;
}
return memo[n]=put(n-3)*2%100000007;
}
int main()
{
int n,i;
scanf("%d",&n);
if(n%3!=0)
{
printf("0");
return 0;
}
else
{
printf("%d",put(n)*2%100000007);
}
//printf("%d",k%1000000007);
}