#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 3;
const int mod = 10000;
typedef long long LL;
struct node {
int a[maxn][maxn];
node() { memset(a, 0, sizeof(a)); }
}ans, si;
LL n;
node multi(node a, node b) {
node t;
for(int i = 0; i < 2; ++i)
for(int j = 0; j < 2; ++j)
for(int k = 0; k < 2; ++k)
t.a[i][j] = (t.a[i][j] + a.a[i][k] * b.a[k][j]) % mod;
return t;
}
int fastpow(LL n) {
si.a[0][0] = si.a[0][1] = si.a[1][0] = 1;
si.a[1][1] = 0;
ans.a[0][0] = ans.a[1][1] = 1;
ans.a[0][1] = ans.a[1][0] = 0;
while(n) {
if(n & 1) ans = multi(ans, si);
si = multi(si, si);
n >>= 1;
}
return ans.a[0][1];
}
int main() {
while(scanf("%I64d", &n) != EOF && n != -1) {
int res = fastpow(n);
printf("%d\n", res);
}
return 0;
}
快速幂运算
int fastpow(int a, int b, int mod) {
int ans = 1; /// a 的 b 次方 并取模mod
a %= mod;
while(b) {
if(b & 1) ans = (ans * a) % mod;
b >>= 1;
a = (a * a) % mod;
}
return ans;
}