求:f(i)=f(i-1)-f(i-2)
/*矩阵快速幂*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
//const int mod = 10000;
const int maxn = 35;
const int M[maxn+5] = {1, 10, 100, 1000, 10000};
int mod;
int N;
struct Matrix {
int mat[maxn][maxn];
int x, y;
Matrix() {
memset(mat, 0, sizeof(mat));
for (int i = 1; i <= maxn - 5; i++) mat[i][i] = 1;
}
};
inline void mat_mul(Matrix a, Matrix b, Matrix &c) {
memset(c.mat, 0, sizeof(c.mat));
c.x = a.x; c.y = b.y;
for (int i = 1; i <= c.x; i++) {
for (int j = 1; j <= c.y; j++) {
for (int k = 1; k <= a.y; k++) {
c.mat[i][j] += (a.mat[i][k] * b.mat[k][j]) % mod;
c.mat[i][j] %= mod;
}
}
}
return ;
}
//快速幂
inline void mat_pow(Matrix &a, int z) {
Matrix ans, base = a;
ans.x = a.x; ans.y = a.y;
ans.mat[1][1] = 1; ans.mat[1][2] = 0;
ans.mat[2][1] = 0; ans.mat[2][2] = 1;
while (z) {
if (z & 1 == 1)
mat_mul(ans, base, ans);
mat_mul(base, base, base);
z >>= 1;
}
a = ans;
}
int main() {
/* int t;
cin >> t;*/
int a, b, n, m;
while(cin >> a >> b >> n){
mod = 1000000007;
if(n==1){
cout << (a+mod)%mod << endl;
continue;
}
if(n==2){
cout << (b+mod)%mod << endl;
continue;
}
Matrix A, B;
A.x = 2; A.y = 2;
A.mat[1][1] = 1; A.mat[1][2] = -1;
A.mat[2][1] = 1; A.mat[2][2] = 0;
B.x = 2; B.y = 1;
B.mat[1][1] = b; B.mat[2][1] = a;
mat_pow(A, n - 2);
/* Matrix ans;
ans.x = A.x; ans.y = A.y;
ans.mat[1][1] = 1; ans.mat[1][2] = 0;
ans.mat[2][1] = 0; ans.mat[2][2] = 1;
mat_mul(ans, A, A);*/
mat_mul(A, B, B);
cout << (B.mat[1][1]+mod)%mod << endl;
}
return 0;
}