#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
const int M=2005;
const int N=4;
int L;
struct Mat
{
int mat[N][N],n,m;//n行m列矩阵
void init(int r,int c)
{
n=r;m=c;
}
void init_e()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
mat[i][j]=(i==j);
}
};
Mat Mul(Mat a,Mat b)
{
Mat ret;
ret.init(a.n,b.m);
memset(ret.mat,0,sizeof(ret.mat));
for(int i=0;i<a.n;i++)
for(int j=0;j<b.m;j++)
for(int k=0;k<b.n;k++)
{
ret.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
if(ret.mat[i][j]>M) ret.mat[i][j]%=M;
}
return ret;
}
Mat exp(Mat a,int k)
{
Mat ret=a,tmp=a;
ret.init_e();
for( ;k;k>>=1)
{
if(k&1)
{
ret=Mul(ret,tmp);
}
tmp=Mul(tmp,tmp);
}
return ret;
}
int main()
{
// freopen("test.txt","r",stdin);
Mat a; a.init(2,2);
a.mat[0][0]=0;a.mat[0][1]=1;
a.mat[1][0]=a.mat[1][1]=1;
while(scanf("%d",&L)!=EOF)
{
Mat ret;
ret=exp(a,L/2);
int ans,detal;
int t1=ret.mat[0][0]+2*ret.mat[1][0];
int t2=ret.mat[0][1]+2*ret.mat[1][1];
if(L%4==1) detal=-1;
else if(L%4==3) detal=1;
if(L%2) ans=(t2*t2-t1*t1+detal)%M;
else ans=(t1*t1)%M;
if(ans<0) ans+=M;
printf("%d\n",ans);
}
return 0;
}