没什么好说的,注意取模
#include <set>
#include <map>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <vector>
#include<cstring>
#include <stdio.h>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 2;
ll n,mod=1e9+7,x,y;
vector<vector<ll>>matx(vector<vector<ll>>f,vector<vector<ll>>s)
{
vector<vector<ll>>d(2,vector<ll>(2,0));
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
for(int k=0;k<maxn;k++)
d[i][j]+=(f[i][k]*s[k][j]+mod)%mod;
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++) s[i][j]=d[i][j];
return s;
}
int main()
{
cin>>x>>y>>n;
vector<vector<ll>>f(2,vector<ll>(2));
vector<vector<ll>>s(2,vector<ll>(2));
f[0][0]=1,f[0][1]=-1,f[1][0]=1,f[1][1]=0;
s[0][0]=1,s[0][1]=0,s[1][0]=0,s[1][1]=1;
if(n==2){printf("%lld\n",(y+mod))%mod;return 0;}
if(n==1){printf("%lld\n",(x+mod)%mod);return 0;}
n-=2;
while (n){
if(n&1)
s=matx(f,s);
f=matx(f,f);
n>>=1;
}
ll ans=((s[0][0]*y+mod)%mod+(s[0][1]*x+mod)%mod+mod)%mod;
printf("%lld\n",ans);
return 0;
}