/* 很水的矩阵题,没什么说的... */ #include<iostream> #include<cstdio> #include<cmath> using namespace std; struct matrix{ long long a[3][3]; }A,B; matrix mult2(matrix A,matrix B){ /// 矩阵乘法 matrix C; for(int i=1;i<=2;i++){ /// 第一个矩阵的行 for(int j=1;j<=2;j++){ /// 第二个矩阵的列 C.a[i][j]=0; for(int k=1;k<=2;k++){ /// 第二个矩阵的行 或者 第一个矩阵的列 C.a[i][j] = (C.a[i][j] + A.a[i][k]*B.a[k][j])%10000; } } } return C; } matrix mult(matrix A,long long n){ /// 二分快速幂 if(n==1) return A; A = mult(A,n/2); if(n%2==0) return A = mult2(A,A); return A = mult2(mult2(A,A),B); } int main(){ long long n; while(scanf("%lld",&n)!=EOF){ if(!n) { printf("0\n"); continue; } if(n == -1) break; A.a[1][1]=1; A.a[1][2]=1; A.a[2][1]=1; A.a[2][2]=0; B = A; A = mult(A,n); printf("%lld\n",A.a[1][2]%10000); } }